我应该如何将Devise双因素身份验证与自定义会话控制器集成?

时间:2015-12-21 12:21:43

标签: ruby-on-rails ruby ruby-on-rails-4 devise

我将Houdini双因素身份验证与现有的rails应用程序集成在一起 首先我没有任何自定义sessions_controller,然后 two_factor_authentication 工作正常。
但是我在Sessions Controller中编写了自定义创建操作,然后它没有通过 two_factor_authentication 进行身份验证。

以下是Sessions控制器创建操作的自定义代码。

  if status_response.nil?
    render :file => 'public/api_not_found.html', :status => :not_found, :layout => false
  else
    if status_response['code'].to_i == 1
      signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
      flash[:alert] = 'Invalid Email ID or password.'
      yield if block_given?
      respond_to_on_destroy
    else
      self.resource = warden.authenticate!(auth_options)
      set_flash_message(:notice, :signed_in) if is_flashing_format?
      sign_in(resource_name, resource)
      yield resource if block_given?
      respond_with resource, location: after_sign_in_path_for(resource)
    end
  end

user.rb的型号代码:

  devise :two_factor_authenticatable, :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable,
     :confirmable, password_length: 8..30
  has_one_time_password


  def send_two_factor_authentication_code
    puts ">>>>>>>>>>>>>>> otp_secret_key: #{otp_secret_key}, otp_code: #{otp_code}"
  end

我知道如果我们要自定义Sessions Controller的创建操作,那么我们应该调用 two_factor_authentication 。我试图在控制器中调用它,但它会抛出错误。

所以我的问题是如何将 two_factor_authentication 与会话控制器的自定义创建操作集成?

1 个答案:

答案 0 :(得分:0)

看起来我只是想用super。

    if status_response.nil?
      render :file => 'public/api_not_found.html', :status => :not_found, :layout => false
    else
      if status_response['code'].to_i == 1
        #If this is true then I didn't got auth_tok from API therefore i forcefully signed out the user.
      else
        super
      end
    end

所以我在这里检查用户的响应并基于此我想允许用户登录。
另一件事是数据库中的otp_code不应该是零。如果它是零则那么2FA将不起作用。它只是将它重定向到root而不需要otp_code。