[RUBY] Schienen-Tutorial Kapitel 9

Einführung

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.

Kapitel 9 Weiterentwicklung des Anmeldemechanismus

9.1.1 Speichertoken und Verschlüsselung

Ü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.

9.1.2 Angemeldet bleiben

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.

9.3.2 Test [Erinnere dich an mich]

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.

Am Ende

In diesem Kapitel war es weniger wahrscheinlich, dass ich aufgrund von Fehlern stolperte, und ich konnte den Inhalt gut verstehen.

Recommended Posts

Schienen-Tutorial Kapitel 7
Schienen-Tutorial Kapitel 5
Schienen-Tutorial Kapitel 10
Schienen-Tutorial Kapitel 9
Schienen-Tutorial Kapitel 8
Rails Tutorial Kapitel 3 Lernen
Rails Tutorial Memorandum (Kapitel 3, 3.1)
Rails Tutorial Kapitel 4 Lernen
Rails Tutorial Kapitel 1 Lernen
Rails Tutorial Kapitel 2 Lernen
Schienen Tutry
Schienen Tutry
Deshalb habe ich dieses Mal die Methode "Verknüpfen des Inhalts des Verzeichnisses" übernommen. Ich denke, es wird je nach Zeit und Fall richtig verwendet. Tutorial zu Linux, ln, Linux-Befehlsschienen
Schienen Tutry
Schienen Tutorial
Schienen Tutorial
[Rails Tutorial Kapitel 4] Ruby mit Rails-Geschmack
Rails Tutorial Memorandum 1
Rails Tutorial Memorandum 2
Tutorial zum Kauen der Schienen [Kapitel 2 Spielzeuganwendung]
[Anfänger] Rails Tutorial
Rails Tutorial (4. Ausgabe) Memo Kapitel 6
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 10
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 7
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 4
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 9
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 6
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 5
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 2
Rails Tutorial Kapitel 0: Vorbereitende Grundkenntnisse 5
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 3
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 8
Kapitel 4 Rails Flavoured Ruby
Schienen Tutorial Cheet Sheet
[Rails] Lernen mit Rails Tutorial
Schienen Tutorial Fighting Record III
Rails Tutorial Kapitel 1 Von Null bis Bereitstellung [Try]
Kauen der Schienen Tutorial [Kapitel 3 Erstellen fast statischer Seiten]
Beheben Sie Gem :: FilePermissionError, wenn Sie Gem Install Rails ausführen (Rails Tutorial Kapitel 1).
11.1 AccountActivations-Ressource: Rails Tutorial Memorandum-Kapitel 11
Rails Tutorial Records und Memorandum # 0
Ich habe Rails Anfänger ausprobiert [Kapitel 1]
Rails Tutorial 4. Ausgabe: Kapitel 1 Von Null bis Bereitstellung
Beheben Sie ActiveRecord :: NoDatabaseError, wenn Sie einen Rails-Test durchführen (Rails-Tutorial, Kapitel 3).
Ich habe Rails Anfänger ausprobiert [Kapitel 2]
[Rails] Implementierung der Tutorial-Funktion
Kauen der Schienen Tutorial [Kapitel 1 Von Null bis Bereitstellung] Zweite Hälfte
Kauen der Schienen Tutorial [Kapitel 1 Von Null bis Bereitstellung] Erste Hälfte