我将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 与会话控制器的自定义创建操作集成?
答案 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。