・ 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
・ 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.
Vient ensuite le chapitre 9, le développement du système d'authentification, la quatrième étape et la seconde moitié de l'implémentation de la connexion. Dans le chapitre 8, nous passerons d'une session temporaire à une session permanente utilisant des cookies. Il y a beaucoup de termes liés à la sécurité, mais gardons le contenu bas dans une certaine mesure. Il existe également un compte docomo, nous devons donc sensibiliser à la sécurité. Cliquez ici pour la BGM d'aujourd'hui. Ma petite amie décédée "Aki No Hachiouji" Je sens l'arrivée de l'automne progressivement.
Mot de passe: créé et géré par l'utilisateur Token: créé et géré par un ordinateur urlsafe_base64: une méthode dans le module SecureRandom de la bibliothèque standard Ruby. Renvoie une chaîne aléatoire de 22 longueurs composée de l'un des caractères A – Z, a – z, 0–9, «-» et «_» (64 types).
Gardez à l'esprit les cinq politiques de création de session permanente suivantes. ** 1. Générez et utilisez une chaîne de caractères aléatoire pour le jeton de stockage. ** ** ** 2. Définissez une date d'expiration lors du stockage des jetons dans les cookies du navigateur. ** ** ** 3. Convertissez les jetons en valeurs de hachage avant de les stocker dans la base de données. ** ** ** 4. Cryptez l'ID utilisateur enregistré dans les cookies du navigateur. ** ** ** 5. Lorsque vous recevez un cookie contenant un ID utilisateur persistant, recherchez cet ID dans la base de données et assurez-vous que les cookies de jeton stockés correspondent à la valeur de hachage dans la base de données. ** **
>> user = User.first
User Load (0.2ms) 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...", remember_digest: nil>
>> user.remember
(0.1ms) begin transaction
SQL (3.0ms) UPDATE "users" SET "updated_at" = ?, "remember_digest" = ? WHERE "users"."id" = ? [["updated_at", "2020-09-13 22:33:06.439353"], ["remember_digest", "$2a$10$IQ/x1avxRSAG281J18FRi.f2icjx8Kac5y8bWua5IDVae.C.Kdwcu"], ["id", 1]]
(5.9ms) commit transaction
=> true
>> user.remember_token
=> "aGtKYk5iEjSHFs16uB7xTQ"
>> user.remember_digest
=> "$2a$10$IQ/x1avxRSAG281J18FRi.f2icjx8Kac5y8bWua5IDVae.C.Kdwcu"
2. Dans le Listing 9.3, nous avons défini de nouveaux jetons et méthodes de classe pour les résumés en appelant explicitement la classe User. En fait, il peut maintenant être appelé en utilisant User.new_token ou User.digest, c'est donc probablement le moyen le plus clair de définir une méthode de classe. Cependant, il existe en fait deux façons de définir davantage de méthodes de classe «Ruby-correct». L'un sera un peu déroutant et l'autre sera très déroutant. Exécutez la suite de tests pour vous assurer que l'implémentation légèrement déroutante du Listing 9.4 et l'implémentation très déroutante du Listing 9.5 fonctionnent. Astuce: Notez que self fait référence au «modèle» utilisateur, ou instance de l'objet utilisateur, dans le contexte normal, mais dans le contexte du Listing 9.4 et du Listing 9.5, self fait référence à la «classe» Utilisateur. Cela fait partie de la raison de l'incompréhensibilité. → Si vous écrivez comme indiqué, les deux sont VERTS. J'ai étudié le style d'écriture qui apparaît ici. Il semble que celle remplacée par le premier User → self s'appelle la méthode de la méthode singulière, et celle résumée par class << self est appelée la méthode de la classe singulière. Pour plus d'informations, consultez cet article. ](Https://magazine.rubyist.net/articles/0046/0046-SingletonClassForBeginners.html)
méthode permanente: expire après 20 ans. méthode signée: effectue le traitement de la signature numérique et du cryptage.
2. Ouvrez la console et voyez si la méthode authentifiée? Du Listing 9.6 fonctionne. → OK si vous entrez le souvenir_token confirmé dans l'exercice 1 comme argument.
user = User.first
Abréviation
user.authenticated?("Exercice 1 rappelez-vous_token")
=> true
Oubliez l'utilisateur = mettez à jour Remember_digest avec nil.
2. Commentez la ligne corrigée dans l'extrait 9.19 et voyez les bogues causés par les deux navigateurs connectés. Essayez de vous déconnecter dans un navigateur et de redémarrer l'autre pour accéder à l'exemple d'application. → Omis parce qu'il est sobre
3. Annulez la partie commentée dans le code ci-dessus et vérifiez que la suite de tests passe du rouge au vert. → Yes, GREEN !
Un opérateur ternaire a émergé. Il semble que vous puissiez écrire une instruction if-else sur une seule ligne. Vous pouvez maintenant voir le code du Listing 8.21 (bien que :: ne soit pas encore tout à fait correct). Donc, le code ci-dessous est
python
cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost
Quand ça devient comme ça.
python
if cost = ActiveModel::SecurePassword.min_cost
BCrypt::Engine::MIN_COST
else
BCrypt::Engine.cost
end
2. Ouvrez la console et considérez un exemple utilisant l'opérateur ternaire (colonne 9.2). → Très simple ci-dessous
>> x = 6
=> 6
>> x % 3 == 0 ? "Multiple de 3" : "Ne pas"
=> "Multiple de 3"
sessions_controller.rb
def create
@user = User.find_by(email: params[:session][:email].downcase)
if @user && @user.authenticate(params[:session][:password])
log_in @user
params[:session][:remember_me] == '1' ? remember(@user) : forget(@user)
redirect_to @user
else
flash.now[:danger] = "Invalid email/password combination"
render 'new'
end
end
users_login_test.rb
test "login with remembering" do
log_in_as(@user, remember_me: '1')
assert_equal cookies['remember_token'], assigns(:user).remember_token
end
Ce test de connexion aux cookies ['Remember_token'], mais quand j'ai essayé les cookies pour la première fois [: Remember_token], le test a réussi. Je me suis demandé pourquoi et j'ai découvert Cet article. Puis-je utiliser des symboles maintenant? Mais la version Rails du tutoriel est ancienne ...
-Persist ID utilisateur et jeton de stockage avec la méthode des cookies. -Les opérations liées à la base de données sont définies dans la classe User. Les méthodes utilisées dans le contrôleur de session sont principalement définies dans l'assistant de session. Le premier est également utilisé dans le second. -La fonction Remember_me est comme un commutateur qui sépare s'il faut conserver ou supprimer les cookies selon que la valeur est 1 ou 0. -Current_user est déterminé par l'état et les informations de la session ou du cookie. ・ Les termes relatifs aux technologies de l'information étant dispersés, ils sont résumés dans le glossaire.
Ce chapitre est déroutant ... Puisqu'il s'agit d'une partie qui n'apparaît pas sur la page Web, il y a une partie où l'image ne peut pas être dessinée. Cependant, la partie sécurité ne peut être négligée. Peut-être que je pourrai recommencer après un certain temps.
Et bien ensuite! Chapitre 10! Nous allons implémenter des fonctions utilisateur non implémentées!
⇨ Allez au chapitre 10! ⇦ Cliquez ici pour le chapitre 8 Cliquez ici pour les conditions préalables et le statut de l'auteur pour l'apprentissage
・ Détournement de session Méthode d'attaque dans laquelle un tiers (attaquant) qui n'est pas partie à la communication prend le contrôle de la session en connaissant l'ID de session par certains moyens.
・ Renifleur de paquets Un terme courant pour les analyseurs LAN. Matériel ou logiciel pour surveiller et enregistrer le trafic passant sur le LAN.
・ Scripts intersites (XSS) Une vulnérabilité dans une application utilisée pour un site Web ou une attaque qui exploite la vulnérabilité. En particulier, une cyberattaque qui se produit en insérant un script malveillant malveillant dans un site dynamique qui peut être créé par un visualiseur Web (par exemple, SNS tel que Twitter, babillard, etc.) en utilisant la vulnérabilité. ..
· Signature numérique Type de technologie de cryptage à clé publique utilisée pour imiter les caractéristiques de sécurité des signatures manuscrites par écrit.
· Sel Données aléatoires ajoutées à l'entrée d'une fonction unidirectionnelle lors du hachage de données telles que des mots de passe et des phrases de passe. Comme vous pouvez le voir dans la note de traduction dans le texte, nous renforçons le code avec une pincée de sel au cas où.
・ Assert_empty Prétendez que obj.empty est vrai.
・ Assert_nil Revendiquer que obj.nil est vrai.
Recommended Posts