2017-01-03 2 views
0

Ich habe eine deviseauthentication bereits in meinem application Setup. Jetzt möchte ich second level authentication in rails implementieren. Ich möchte hard code die email und password Codierung in controllers. Ich möchte dies email und password mit der email und password von der user bereitgestellten vergleichen. anstatt in database zu speichern und für second level authentication zu pflücken., weil diese 5 bis 6 links zu einem beliebigen Zeitpunkt von nur einem im company verwendet werden. Ich möchte dies für eine 5 bis 6 actions in meiner Anwendung im Controller implementieren. Wie kann ich das umsetzen? Ich überprüfte ein Edelsteinjuwel "devise-authy", aber es scheint, dass es eine password an Mobile für otp Authentifizierung sendet. Ich möchte keine Authentifizierung. Ich möchte eine zweite Level-Authentifizierung mit der gleichen E-Mail wie Geräte-E-Mail, aber das Passwort sollte anders sein als das ursprüngliche Passwort des Geräts. (Wie in der Tabelle devise möchte ich eine weitere Spalte second_level_password nehmen.) Gibt es gem für diese Art von Anforderung oder ist dies manually codiert. Wenn es manually codiert ist, wie kann ich das tun?Wie implementiert man die Authentifizierung der zweiten Ebene in Schienen?

Antwort

0

Sie können before_action in Schienen-Controller verwenden.

Fügen Sie die folgende Codezeile in Ihren Controller ein.

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 

EDIT

Sie

attr_accessor_with_default verwenden können: second_level_logged_in false

Add folgende Zeile 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 

in create action von second_level_logged_in

add Code current_user.second_level_logged_in=true

+0

Vielen Dank für die Antwort. Aber wenn ich auf diese Links klicke, wenn der Benutzer nicht bereits mit dem second_level_password angemeldet ist, möchte ich das second_level_authentication-Formular wie das devise bereitstellen. Wenn er sich bereits mit dem zweiten Passwort angemeldet hat, wird kein Formular der zweiten Stufe mehr angezeigt. Wenn er sich von der zweiten Ebene abmeldet, möchte ich nur die Authentifizierung der zweiten Ebene mit der Authentifizierung der ersten Ebene abmelden oder die Sitzung sollte gleich bleiben. Wie kann ich das machen? – John

+0

Sie können attr_accessor_with_default verwenden: second_level_logged_in false In den Anwendungscontroller folgende Zeile: before_action: logged_in_with_second_level, wenn: 'current_user und second_level_logged_in!' def logged_in_with_second_level redirect_to 'second_level_logged_in_form_page' Ende in Aktion von second_level_logged_in erstellen zuweisen current_user.second_level_logged_in = true –

+0

@John, Ich aktualisierte Code in meiner Antwort, bitte werfen Sie einen Blick –

Verwandte Themen