Ich werde den Prozess der Weiterentwicklung des Rails-Tutorials selbst veröffentlichen.
Es berührt Wörter, die ich dabei nicht verstanden habe, und hat Fehler blockiert.
Bitte weisen Sie auf Fehler hin, da diese auf persönlichem Lernen beruhen.
Da dies mein erster Beitrag ist, denke ich, dass es viele Orte gibt, die schwer zu lesen sind, aber bitte verzeihen Sie mir.
Überprüfung von attr_accessor
Referenz https://qiita.com/Hassan/items/0e034a1d42b2335936e6 .remember_token kann verwendet werden (das Attribut Remember_token kann verwendet werden)
def remember
self.remember_token = User.new_token
update_attribute(:remember_digest, User.digest(remember_token))
end
Das letzte (Remember_Token) lässt sich selbst weg.
BCrypt::Password.new(remember_digest) == remember_token
Wenn Sie sich diesen Code genauer ansehen, sieht er wirklich seltsam aus. Das bcrypt-verschlüsselte Passwort wird direkt mit dem Token verglichen. (Rails Tutorial Zitiert aus Kapitel 9)
Hmmm, sicher ...
Wird der Digest beim Vergleich mit == entschlüsselt? Der bcrypt-Hash sollte jedoch nicht entschlüsselt werden, sodass er nicht entschlüsselt werden kann. (Rails Tutorial Zitiert aus Kapitel 9)
Nun, was ist los?
BCrypt::Password.new(remember_digest).is_password?(remember_token)
Anscheinend haben die beiden obigen Codes die gleiche Bedeutung. Außerdem scheint die Methode is_password? Das Objekt und die an ihn übergebenen Argumente zu validieren und true zurückzugeben, wenn sie übereinstimmen.
In der in Listing 9.24 definierten Hilfsmethode log_in_as ist sie außerdem als Sitzung [: Benutzer-ID] definiert. Bei dieser Geschwindigkeit ist es sehr schwierig, den komplizierten Verzweigungsprozess der current_user-Methode mit einem Integrationstest zu überprüfen. (Rails Tutorial Zitiert aus Kapitel 9)
Hmm warum? A. Weil die Sitzungsmethode im Integrationstest nicht behandelt werden kann
test/test_helper.rb
def log_in_as(user)
session[:user_id] = user.id #Nicht verfügbar
end
test/helpers/sessions_helper_test.rb
test "current_user returns right user when session is nil" do
assert_equal @user, current_user
assert is_logged_in?
end
Was ist das current_user Es scheint, dass es ein Modellobjekt wird, nachdem die current_user-Methode ausgeführt wurde. Vielleicht,,,
Mit anderen Worten log_in user Und so weiter, und ich denke, die Sitzungsmethode wird auch ausgeführt ...
app/helpers/sessions_helper.rb
def current_user
if user_id = session[:user_id] #false
@current_user ||= User.find_by(id: user_id)
elsif user_id = cookies.signed[:user_id] #true
user = User.find_by(id: user_id)
if user && user.authenticated?(cookies[:remember_token])
log_in user #Anmeldung
@current_user = user
end
end
end
Die current_user-Methode ist ein Modellobjekt, das eine Instanz des Modells als Rückgabewert zurückgibt.
test/helpers/sessions_helper_test.rb
test "current_user returns nil when remember digest is wrong" do
@user.update_attribute(:remember_digest,User.digest(User.new_token))
assert_nil current_user
end
@user.update_attribute(:remember_digest, User.digest(User.new_token))
Remember_digest wurde auf ein neues aktualisiert.
assert_nil current_user
Ist
app/helpers/sessions_helper.rb
def current_user
if user_id = session[:user_id]
@current_user ||= User.find_by(id: user_id)
elsif user_id = cookies.signed[:user_id]
user = User.find_by(id: user_id)
if user && user.authenticated?(cookies[:remember_token]) #falsch und aktuell_Benutzer wird Null
log_in user
@current_user = user
end
end
end
if user && user.authenticated?(cookies[:remember_token])
Ich überprüfe, ob current_user in dieser Überprüfung Null ist.
In diesem Kapitel war es weniger wahrscheinlich, dass ich aufgrund von Fehlern stolperte, und ich konnte den Inhalt gut verstehen.
Recommended Posts