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?