Je publierai le processus de progression du tutoriel sur les rails par moi-même.
Cela touche des mots que je n'ai pas compris dans le processus et des erreurs bloquées.
Veuillez signaler toute erreur car il s'agit d'un résultat d'apprentissage personnel.
Puisqu'il s'agit de mon premier article, je pense qu'il y a beaucoup d'endroits difficiles à lire, mais pardonnez-moi s'il vous plaît.
Fiche de attr_accessor
référence https://qiita.com/Hassan/items/0e034a1d42b2335936e6 .remember_token peut être utilisé (l'attribut Remember_token peut être utilisé)
def remember
self.remember_token = User.new_token
update_attribute(:remember_digest, User.digest(remember_token))
end
Le dernier (Remember_token) omet self.
BCrypt::Password.new(remember_digest) == remember_token
Si vous regardez de plus près ce code, cela semble vraiment étrange. Le mot de passe chiffré par bcrypt est comparé directement au jeton. (tutoriel sur les rails Extrait du chapitre 9)
Hmmm, sûrement ...
Le résumé est-il déchiffré lors de la comparaison avec ==? Cependant, le hachage bcrypt ne doit pas être déchiffré, il ne peut donc pas être déchiffré. (tutoriel sur les rails Extrait du chapitre 9)
Eh bien, que se passe-t-il?
BCrypt::Password.new(remember_digest).is_password?(remember_token)
Apparemment, les deux codes ci-dessus ont la même signification. De plus, il semble que la méthode is_password? Valide l'objet et les arguments qui lui sont passés et retourne true s'ils correspondent.
De plus, dans la méthode d'assistance log_in_as définie dans le Listing 9.24, il est défini comme session [: user_id]. À ce rythme, il est très difficile de vérifier le processus de branchement compliqué de la méthode current_user avec un test d'intégration. (tutoriel sur les rails Extrait du chapitre 9)
Hmm .. Pour quoi? A. Parce que la méthode de session ne peut pas être gérée dans le test d'intégration
test/test_helper.rb
def log_in_as(user)
session[:user_id] = user.id #Indisponible
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
Quel est cet utilisateur_actuel Il semble qu'il devienne un objet modèle après l'exécution de la méthode current_user. Peut-être ,,,
En d'autres termes log_in user Et ainsi de suite, et je pense que la méthode session est également en cours d'exécution ...
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 #S'identifier
@current_user = user
end
end
end
La méthode current_user est un objet de modèle qui renvoie une instance du modèle en tant que valeur de retour.
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))
Mise à jour de Remember_digest par un nouveau
assert_nil current_user
Est
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]) #faux et courant_l'utilisateur devient nul
log_in user
@current_user = user
end
end
end
if user && user.authenticated?(cookies[:remember_token])
Je vérifie si current_user est nul dans cette vérification.
Dans ce chapitre, j'étais moins susceptible de trébucher à cause d'erreurs et j'ai pu bien comprendre le contenu.
Recommended Posts