2017-06-25 7 views
3

Ich mache Schienen API-Authentifizierung mit Gerät, aber konnte nicht richtig verstehen, was sign_in des Gerätes für uns tut.Was macht sign_in des Gerätes

Ich habe Session-Controller mit create-Methode für die Anmeldung in einem Benutzer.

def create 
user_email = params[:session][:email] 
user_password = params[:session][:password] 
user = user_email.present? && User.find_by(email: user_email) 
if user.valid_password?(user_password) 
    sign_in user, store: false /* exactly this line */ 
    render json: user, status: 200, location: [:api, user] 
else 
    render json: { errors: "Invalid email or password" }, status: 422 
end 
end 

Auf RubyDoc ist seine Beschreibung wie diese

Anmelden eines Benutzers geschrieben, die bereits authentifiziert wurde. Dieser Helfer ist nützlich für die Anmeldung von Benutzern nach der Anmeldung. Alle Optionen für sign_in werden an die Methode set_user in warden übergeben.

Aber es ist mir nicht klar. Vielen Dank.

Antwort

1

sign_in ist für, wenn Sie bereits ein User Objekt haben, das Sie selbst erstellt oder geladen/authentifiziert haben und daher in der Sitzung als authentifizierter Benutzer für den Rest der aktuellen sowie zukünftigen Anforderungen speichern möchten.

Wenn Sie sich die source code for the default Devise SessionsController ansehen, sehen Sie, dass sie auch sign_in verwendet, um sich bei einem Benutzer anzumelden.

Devise ist eine Schicht über warden, so dass Sie vielleicht die documentation betrachten, um dieses Maß an Funktionalität zu verstehen. Wie die von Ihnen zitierte Devise-Dokumentation angibt, ruft sign_in gerade die set_user-Methode von warden auf. Was Devise zusätzlich hinzufügt, ist eine Menge Bequemlichkeit wie die Fähigkeit, mit mehreren Bereichen und verschiedenen Warden-Authentifizierungsstrategien zu arbeiten.

+0

was ich hier verstehe, ist sign_in store Benutzerobjekt in der Sitzung als authentifizierter Benutzer. –

+0

Stellt die Methode "sign_in" current_user in Schienen zur Verfügung? –

+0

Was ist die Bedeutung von Speicher: false hier –