[RUBY] tutoriel rails Chapitre 9

introduction

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.

Chapitre 9 Évolution du mécanisme de connexion

9.1.1 Jeton de stockage et chiffrement

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.

9.1.2 Rester connecté

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.

9.3.2 Test [Se souvenir de moi]

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.

À la fin

Dans ce chapitre, j'étais moins susceptible de trébucher à cause d'erreurs et j'ai pu bien comprendre le contenu.

Recommended Posts

tutoriel rails Chapitre 7
tutoriel rails Chapitre 5
tutoriel rails Chapitre 10
tutoriel rails Chapitre 9
tutoriel rails Chapitre 8
Tutoriel Rails Chapitre 3 Apprentissage
Mémorandum du didacticiel Rails (Chapitre 3, 3.1)
Tutoriel Rails Chapitre 4 Apprentissage
Tutoriel Rails Chapitre 1 Apprentissage
Tutoriel Rails Chapitre 2 Apprentissage
rails tutry
rails tutry
tutoriel sur les rails
rails tutry
tutoriel sur les rails
tutoriel sur les rails
[Tutoriel Rails Chapitre 4] Rubis à saveur de Rails
Mémorandum du didacticiel Rails 1
Tutoriel Rails Memorandum 2
Tutoriel de mastication des rails [Chapitre 2 Application jouet]
[Débutant] Tutoriel Rails
Tutoriel Rails (4e édition) Mémo Chapitre 6
Tutoriel Rails 6e édition Résumé d'apprentissage Chapitre 10
Rails Tutorial 6e édition Résumé de l'apprentissage Chapitre 7
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 4
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 9
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 6
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 5
Rails Tutorial 6e édition Résumé de l'apprentissage Chapitre 2
Tutoriel Rails Chapitre 0: Apprentissage préliminaire des connaissances de base 5
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 3
Rails Tutorial 6e édition Résumé d'apprentissage Chapitre 8
Rubis aromatisé aux rails
Fiche technique du didacticiel Rails
[Rails] Didacticiel Apprendre avec les rails
rails Tutorial Fighting Record III
Tutoriel Rails Chapitre 1 De zéro au déploiement [Essayer]
Tutoriel de mastication des rails [Chapitre 3 Création de pages presque statiques]
Résoudre Gem :: FilePermissionError lors de l'exécution de rails d'installation de gem (Tutoriel Rails Chapitre 1)
11.1 Ressource AccountActivations: Mémorandum du didacticiel Rails - Chapitre 11
Registres du didacticiel Rails et mémorandum n ° 0
J'ai essayé Rails débutant [Chapitre 1]
Tutoriel Rails 4e édition: Chapitre 1 De zéro au déploiement
Résoudre ActiveRecord :: NoDatabaseError lors du test des rails (Tutoriel Rails Chapitre 3)
J'ai essayé Rails débutant [Chapitre 2]
[Rails] Implémentation de la fonction tutoriel
Tutoriel Chewing the Rails [Chapitre 1 De zéro au déploiement] Deuxième moitié
Tutoriel Chewing the Rails [Chapitre 1 De zéro au déploiement] Première moitié