[RUBY] (Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 8]

supposition

・ Le tutoriel Rails est la 4ème édition ・ Cette étude est le 3e tour (2e tour après le chapitre 9) ・ L'auteur est un débutant qui a fait tout Progate

Politique de base

・ Si vous le lisez, vous ne le comprendrez pas. ・ Recherchez et résumez les termes que vous ne comprenez pas (en bas de l'article, glossaire). ・ Plongez dans ce que vous ne comprenez pas. ・ Travaillez sur tous les exercices. ・ Ne copiez pas le code autant que possible.

Le chapitre 8 est le développement du système de connexion et d'authentification, la troisième étape, et le mécanisme de connexion de base sera mis en œuvre. (Nous le développerons plus avant au chapitre 9) Les termes des technologies de l'information sont dispersés, alors procédons tout en comprenant la signification et le fonctionnement de chaque terme.   La BGM d'aujourd'hui a un goût différent. Bande originale de l'anime télévisé "Yurukan △" Ça devient enfin plus frais. C'est la saison parfaite pour le camping. Allons rafraîchir les yeux et la tête fatiguée du codage.

[8.1.1 Exercice du contrôleur de sessions]

  1. Pouvez-vous expliquer la différence entre GET login_path et POST login_path? Réfléchissons un peu. → GET obtient la vue de la page de connexion (nouvelle action), POST envoie les données saisies dans le formulaire et exécute la connexion (action de création).

2. En connectant le résultat de l'exécution des rails routes et la commande grep à l'aide de la fonction pipe du terminal, seuls les itinéraires liés à la ressource Users peuvent être affichés. De même, affichons uniquement les résultats de la ressource Sessions. Combien de ressources de sessions disposez-vous actuellement? Conseil: Si vous ne savez pas comment utiliser les tubes et grep, consultez la section Apprendre suffisamment de ligne de commande pour être dangereux sur Grep. → Fonction pipe: (Commande) | (Commande) Une fonction qui connecte des commandes entre elles. Commande grep: une commande pour rechercher une chaîne de caractères dans un fichier. Donc ci-dessous. Est-il inévitable que l'inscription soit incluse?

$ rails routes | grep users#
      signup GET    /signup(.:format)         users#new
             POST   /signup(.:format)         users#create
       users GET    /users(.:format)          users#index
             POST   /users(.:format)          users#create
    new_user GET    /users/new(.:format)      users#new
   edit_user GET    /users/:id/edit(.:format) users#edit
        user GET    /users/:id(.:format)      users#show
             PATCH  /users/:id(.:format)      users#update
             PUT    /users/:id(.:format)      users#update
             DELETE /users/:id(.:format)      users#destroy
$ rails routes | grep sessions#
    login GET    /login(.:format)          sessions#new
          POST   /login(.:format)          sessions#create
   logout DELETE /logout(.:format)         sessions#destroy

[8.1.2 Exercice du formulaire de connexion]

  1. Lorsque vous soumettez dans le formulaire défini dans le Listing 8.4, vous atteindrez l'action de création du contrôleur de sessions. Comment Rails fait-il cela? Conseil: notez la première ligne du tableau 8.1 et de l'extrait 8.5. → Ce sera une phrase de post '/ login', à: 'sessions # create' dans le fichier de routes. Émettez une demande de publication avec form_for → Attribuer à l'action de création du contrôleur de sessions par routage.

[8.1.3 Recherche d'utilisateurs et exercice d'authentification]

  1. À l'aide de la console Rails, vérifiez que chaque expression du tableau 8.2 correspond. Commencez par vérifier le cas où user = nil, puis le cas où user = User.first. Astuce: utilisez la technique !! introduite dans 4.2.3 pour vous assurer qu'il s'agit d'un objet de valeur logique. Exemple: !! (utilisateur && user.authenticate ('foobar')) → Ci-dessous
>> user = nil
=> nil
>> !!(user && user.authenticate("foobar"))
=> false

>> user = User.first
  User Load (0.1ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ?  [["LIMIT", 1]]
=> #<User id: 1, name: "Rails Tutorial", email: "[email protected]", created_at: "2020-09-12 09:09:50", updated_at: "2020-09-12 09:09:50", password_digest: "$2a$10$hrOEzw0faSd4yurmH8bQJOnggeNnUqTZg33yE9g7Tnk...">
>> !!(user && user.authenticate("matigatteruyo"))
=> false
>> !!(user && user.authenticate("hogehoge"))
=> true

[8.1.5 Exercice de test Flash]

  1. Veuillez vérifier avec votre navigateur si le flux de traitement de 8.1.4 fonctionne correctement. En particulier, n'oubliez pas d'aller sur une autre page après avoir affiché le message flash pour voir si le flash fonctionne bien. → Essayons-le. Si vous allez sur une autre page, le flash s'éteint.

[8.2.1 Exercice sur la méthode log_in]

  1. Veuillez vous connecter en tant qu'utilisateur valide et vérifier les informations sur les cookies depuis votre navigateur. Quelle est la valeur de la session à ce stade? Conseil: Vous ne savez pas comment rechercher des cookies dans un navigateur? Il est maintenant temps de chercher sur Google! (Colonne 1.1)
  2. Comme pour l'exercice précédent, vérifiez la valeur de Expires. → Collectivement, l'image ci-dessous. Expire = Expire, donc c'est à l'intérieur du carré vert. La date d'expiration est à la fin de la session du navigateur. スクリーンショット 2020-09-13 14.16.12.png

[8.2.2 Exercice utilisateur actuel]

  1. A l'aide de la console Rails, confirmons que User.find_by (id: ...) renvoie nil lorsque l'utilisateur correspondant n'est pas trouvé dans la recherche. → Ci-dessous
>> User.find_by(id: 8)
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 8], ["LIMIT", 1]]
=> nil

2.Comme avant, cette fois:user_Créons un hachage de session avec une clé d'identifiant. Annonce 8.Suivez les étapes décrites dans 17.||=Vérifions également que l'opérateur fonctionne. → Ci-dessous

>> session = {}
=> {}
>> session[:user_id] = nil
=> nil
>> @current_user ||= User.find_by(id: session[:user_id])
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT ?  [["LIMIT", 1]]
=> nil
>> session[:user_id] = User.first.id
  User Load (0.1ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ?  [["LIMIT", 1]]
=> 1
>> @current_user ||= User.find_by(id: session[:user_id])
  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
=> #<User id: 1, name: "Rails Tutorial", email: "[email protected]", created_at: "2020-09-12 09:09:50", updated_at: "2020-09-12 09:09:50", password_digest: "$2a$10$hrOEzw0faSd4yurmH8bQJOnggeNnUqTZg33yE9g7Tnk...">
>> @current_user ||= User.find_by(id: session[:user_id])
=> #<User id: 1, name: "Rails Tutorial", email: "[email protected]", created_at: "2020-09-12 09:09:50", updated_at: "2020-09-12 09:09:50", password_digest: "$2a$10$hrOEzw0faSd4yurmH8bQJOnggeNnUqTZg33yE9g7Tnk...">

[8.2.3 Exercice pour changer le lien de mise en page]

  1. Essayez de supprimer le cookie de session à l'aide de la fonction d'inspecteur de cookies de votre navigateur (8.2.1.1). Le lien dans la partie d'en-tête est-il non connecté? → Essayez-le. Vous êtes maintenant dans un état non connecté.

2. Essayez de vous reconnecter et constatez que la disposition de l'en-tête a changé. Ensuite, redémarrez votre navigateur et assurez-vous que vous êtes de nouveau dans l'état non connecté. Remarque: Si vous activez la fonction Restore Closed state de votre navigateur, les informations de session peuvent également être restaurées. Si cette fonctionnalité est activée, n'oubliez pas de la désactiver (colonne 1.1). → Essayez-le.

[8.2.4 Notes et exercices pour tester les changements de mise en page]

Le code de la méthode digest ici est-il honnête? ?? Statut. Que signifie écrire deux:? Il sortait du front. Si vous le recherchez, la notation PHP sort, est-ce bon pour le même sens? Les assertions du test sont résumées dans le glossaire.

  1. Essayez de supprimer! De la méthode log_in? De l'assistant de session et voyez que le Listing 8.23 devient rouge.
  2. Annulons la partie (!) Qui a été supprimée précédemment et vérifions que le test redevient vert. → Collectivement. Bien sûr, cela échouera. L'affichage de l'en-tête est inversé lorsqu'il est connecté ou non connecté. Si vous le remettez, c'est VERT.

[8.2.5 Notes de connexion et exercices lors de l'inscription en tant qu'utilisateur]

Vous avez défini diverses méthodes d'assistance dans ce chapitre. Écrivez votre code tout en sachant où vous le définissez pour utilisation. Que ce soit pour l'utiliser dans le contrôleur ou dans le test.

  1. Si je commente la ligne log_in dans l'extrait 8.25, la suite de tests sera-t-elle rouge ou verte? → Ce sera ROUGE. J'écris du code pour vérifier si je suis connecté au test.

2. Utilisez la fonction de l'éditeur de texte que vous utilisez actuellement pour vérifier si vous pouvez mettre en commentaire la liste 8.25 à la fois. Exécutez également la suite de tests avant et après la mise en commentaire et assurez-vous qu'elle devient rouge lorsque vous commentez et verte lorsque vous annulez le commentaire. Conseil: n'oubliez pas de sauvegarder le fichier après avoir commenté. En outre, pour la fonction de commentaire de l'éditeur de texte, consultez Commenter le didacticiel de l'éditeur de test. → (Pour Mac) Appuyez sur commande + A pour tout sélectionner, commande + / pour commenter. Bien sûr, ce sera ROUGE / VERT avant et après les commentaires.

[8.3 Mémos et exercices de déconnexion]

  1. Cliquez sur le lien [Déconnexion] du navigateur et voyez ce qui se passe. Essayez également les trois étapes définies dans le Listing 8.31 pour voir si cela fonctionne. → Cela fonctionne correctement.

2. Vérifiez le contenu des cookies et confirmez que la session a été supprimée normalement après la déconnexion. → Il a été supprimé.

Résumé du chapitre 8

-Sauvegarde de l'état temporaire avec la méthode de session. -Le modèle d'utilisateur d'enregistrement actif n'étant pas utilisé pour la connexion, le message d'erreur associé ne peut pas être utilisé. -Afficher les messages flash uniquement pour les pages rendues avec flash.now. ・ Form_for semble être remplacé par form_with, donc pour référence. ・ Utilisez correctement render et redirect_to. -Afficher un message flash. -Tester l'implémentation autour de la connexion dans le test d'intégration (si la connexion / déconnexion est possible, l'en-tête est commuté)

Ce chapitre s'est poursuivi sans erreurs majeures. Nous présenterons un mécanisme avancé à partir du prochain chapitre 9. Enfin, nous entrerons dans le chapitre qui n'a qu'un tour! Soyons excités!

Allez au chapitre 9! Cliquez ici pour le chapitre 7 Cliquez ici pour les conditions préalables et le statut de l'auteur pour l'apprentissage

Glossaire qui saisit en quelque sorte l'image

· Protocole sans état Échange indépendant d'informations qui ne maintient pas l'état. Si vous le comparez à la fonction de connexion, si vous fermez le navigateur puis entrez à nouveau, vous serez à nouveau connecté.

· Session Une série de communications (de la connexion à la déconnexion, etc.). Sur le site, c'est l'identifiant qui est inscrit dans le cookie du navigateur lors de votre première visite.

· Biscuit Protocole de communication qui gère l'état entre un serveur Web et un navigateur Web dans HTTP, et les informations stockées dans le navigateur Web qui y est utilisé. Il est utilisé dans les paniers d'achat et les fonctions de connexion sur les sites EC. Vous pouvez l'effacer des paramètres du navigateur, en pensant qu'il s'est accumulé.

・ Assert_redirected_to Testez si la destination de redirection appelée immédiatement avant cette assertion correspond à la destination de redirection ci-dessous.

・ Follow_redirect! En fait, passez à cette page. Utilisé lors du test d'autres éléments à destination.

Recommended Posts

(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un tutoriel Rails [Chapitre 11]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 1]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 14]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 12]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 5]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 4]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 8]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 6]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 13]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 9]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 10]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 7]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 2]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Introduction]
[Tutoriel Rails Chapitre 5] Créer une mise en page
(Ruby on Rails6) Création de données dans une table
tutoriel rails Chapitre 6
tutoriel rails Chapitre 1
tutoriel rails Chapitre 7
tutoriel rails Chapitre 5
tutoriel rails Chapitre 10
tutoriel rails Chapitre 9
tutoriel rails Chapitre 8
[Tutoriel Rails Chapitre 2] Que faire lorsque vous faites une erreur dans le nom de la colonne
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
Difficultés à créer un environnement Ruby on Rails (Windows 10) (SQLite3)
Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)
Appliquer le CSS à une vue spécifique dans Ruby on Rails