2017-01-03 59 views
0

我有一個deviseauthentication已經安裝在我的application。現在我想實施second level authenticationrails。我想要hard codeemailpassword編碼在controllers。我想比較這emailpassworduser提供的emailpassword。而不是在database保存和採摘second level authentication,因爲這些5至6 links將要僅由一個personcompany在任何時間點使用。我想在我的控制器應用程序中實現5至6個actions。我怎麼能實現這個?我檢查了寶石'devise-authy',但它似乎發送password到手機otp身份驗證。我不想otp認證。我想用與設計電子郵件相同的電子郵件進行二級身份驗證,但密碼應該與設計原始密碼不同(例如,在設計表中,我想再取一列second_level_password。)有沒有這種需求的任何gem或這是manually編碼。如果是manually編碼,那我該怎麼做?如何在rails中實現二級認證?

回答

0

您可以在rails控制器中使用before_action。

在控制器中添加以下代碼行。

before_action :second_level_access 

private 

def second_level_access 
    #You can use your logic to get password 
    unless current_user.second_level_password == params[:second_level_password] 
    # signout to user because user is already logged in with devise. 
    redirect_to session_path 
    end 
end 

編輯

您可以使用

attr_accessor_with_default:second_level_logged_in,假

添加以下行application controller

before_action :logged_in_with_second_level, if: 'current_user and !second_level_logged_in' 

def logged_in_with_second_level 
    redirect_to 'second_level_logged_in_form_page' 
end 

second_level_logged_in

附加代碼current_user.second_level_logged_in=true

+0

感謝您的回答create action。但如果用戶還沒有用second_level_password登錄,點擊這些鏈接,那麼我想提供與設計相同的second_level_authentication表單。如果他已經使用第二個密碼登錄,則不會有第二級表單。如果他從第二級註銷,我想只註銷第一級認證的第二級認證或會話應保持相同。我怎樣才能做到這一點? – John

+0

您可以使用attr_accessor_with_default:second_level_logged_in,假 添加下面一行到應用控制器: before_action:logged_in_with_second_level,如果: 'CURRENT_USER和second_level_logged_in!' 高清logged_in_with_second_level redirect_to的 'second_level_logged_in_form_page' 端 創建的second_level_logged_in 行動在我的答案分配current_user.second_level_logged_in =真 –

+0

@約翰, 我更新的代碼,請看看 –