Rails Tutorial - 9.3.3 Current_User

Así que estoy siguiendo laRails Tutorial, y he llegado a la parte en la que queremos iniciar sesión con un usuario con un Sign_in SessionHelper.

Pregunta :

  module SessionsHelper

  def sign_in(user)
    cookies.permanent.signed[:remember_token] = [user.id, user.salt]
    current_user = user
  end

  def current_user=(user) #set current_user
    @current_user = user
  end

  def current_user #get current_user
    @current_user
  end

o que me cuesta es la parte que dice:

El problema es que no resuelve por completo nuestro problema: con el código se olvidaría el estado de inicio de sesión del usuario: tan pronto como el usuario fuera a otra página.

No entiendo cómo esto es cierto? Sigo leyendo y entiendo que el código agregado se asegura de que @current_user nunca sea nulo. Pero no veo cómo current_user volvería a cero si lo estableciéramos en la 5ta línea.

Pregunta :

El código actualizado se lee como tal:

module SessionsHelper

  def sign_in(user) #in helper because used in view & controller
    cookies.permanent.signed[:remember_token] = [user.id, user.salt]
    current_user = user
  end

  def current_user=(user) #set current_user
    @current_user = user
  end

  def current_user #get current_user
    @current_user ||= user_from_remember_token #<-- short-circuit evaluation
  end

  private

    def user_from_remember_token
      User.authenticate_with_salt(*remember_token) #*=use [] instead of 2 vars
    end

    def remember_token
      cookies.signed[:remember_token] || [nil, nil]
    end
end

En el ayudante remember_token, ¿por qué usa cookies.signed [] en lugar de cookies.permanent.signed [] y por qué no usa el operador || = que acabamos de aprender?

Pregunta :

¿Por qué necesitamos autenticar_con_salida? Si autentico & sign_in puedo ver los atributos id y salt del usuario que se le pasó, ¿por qué necesitamos hacer doble clic? ¿Qué tipo de situación desencadenaría una confusión?

Respuestas a la pregunta(1)

Su respuesta a la pregunta