Rails Entwickeln - current_user ist null
Aus irgendeinem Grund current_user
zurück nil
in meinem Modell-weniger-controller (Subscriptions
). Ich habe nichts gefunden auf dem Internet zu rechtfertigen, dieses Verhalten...
class SubscriptionsController < ApplicationController
def new
...
end
def create
current_user # returns nil
end
end
Ich habe eine csrf-meta-tag :
<meta content="xxx" name="csrf-token">
Kann ich mehr code, aber ich bin mir nicht sicher, was sinnvoll wäre.
UPDATE
Also danke für die Kommentare/Antworten, die ich aufgezeigt haben, das problem zu einer besonderen Aktion : create
.
wenn ich @user = current_user
zu den new
ich kann zeigen Sie das aktuelle Benutzer-E-Mail in meinem new
anzeigen. Jedoch, in meinem create
controller current_user
zurück nil
.
Ich auf die create
Aktion mittels eines Formulars (submit).
Bevor das Formular abgeschickt wird, ich überprüfen die Eingabe und senden Sie dann eine Anfrage zu Streifen um ein token aus der form. Wenn es keine Fehler (Validierung und Streifen) auf, die ich dann senden Sie das Formular.
Könnte das die Ursache sein?
UPDATE 2
In meiner Fehlermeldung, meine session-dump ist leer, dabei sollte es enthält die current_user info...
User
? da current_***
nehmen den Namen des Modells. Was bedeutet user_signed_in?
zurück?Ist es auf false gesetzt... Das ist komisch, weil der Benutzer authentifiziert werden muss, um die Seite anzuzeigen
InformationsquelleAutor Justin D. | 2013-08-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es stellte sich heraus der AJAX-Anfrage, die ich machte nicht tragen das CSRF-token. Aus diesem Grund Schienen war das töten von meiner Sitzung.
Fügte ich
skip_before_filter :verify_authenticity_token
in meinemSubscriptionsController
und es funktioniert jetzt. Es ist vielleicht nicht die sicherste Lösung, aber es funktioniert für jetzt, so dass ich weiter zu entwickeln und kommen zurück, um dieses Problem später.Es ist schon einige Monate und ich erinnere mich nicht genau. Es war auf jeden Fall verursacht durch meine AJAX-Aufruf, obwohl...
InformationsquelleAutor Justin D.
Beachten Sie, dass beim erstellen von Formularen unter Verwendung der
form_tag
Helfer, Sie generieren nicht automatisch das versteckte Feld enthält den token zum CSRF-Authentifizierung. Ich lief in das gleiche Problem mit einer form, die ich gebaut hatte mit derform_tag
die ich manchmal lieber mit.Ich das Problem, indem Sie die folgenden Helfern in der form:
<%= hidden_field_tag 'authenticity_token', form_authenticity_token %>
Es ist im Grunde eine manuelle Möglichkeit der Generierung des hidden-Feld müssen Sie für die CSRF-Kram.
InformationsquelleAutor Adam Waselnuk
für
current_user
zu arbeiten, müssen Siebefore_filter :authenticate_user!
zu Ihrer Klasse, wie:und die
authenticate_user!
Methode setzt den aktuellen Benutzer für Sie 🙂Ja, das
:authenticate_user!
was es tut, ist zu überprüfen, füruser_signed_in?
und wenn es falsch ist, senden Sie den Benutzer auf die Anmeldeseite. Es ist nicht nötig fürcurrent_user
initialisiert werden.Das Ding ist, der Benutzer soll authentifiziert werden, da er Zugriff auf die Seite. So, während
authenticate_user!
zeigt das problem nicht direkt löst. Sehr nützlich zum ermitteln der Fehler, obwohl.Debuggen Ihrer Frage: Zuerst, werden Sie sicher, dass genau das "erstellen" - Aktion.. Zweite, nur überprüfen Sie Sie heraus, wenn Sie Ihre Sitzung ist stabil auf jede Handlung: irgendwo in einer Ansicht
<%= request.session_options[:id] %>
. Es würde nichts ändern. Also, wenn 1 und 2 übergeben, somit ist das problem in der app-Logik...alle before_filters veraltet im Rails 5.0 und entfernt werden, Rails 5.1. Verwenden before_action statt
InformationsquelleAutor Vinicius