это просто метод разрешения пользователя по «секретной» соли, что я считаю плохой идеей, поскольку такая информация не должна передаваться кому-либо, даже в зашифрованном виде. Токен аутентификации специального назначения - лучшая идея.
то я следую заRails Tutorialи я дошел до той части, где мы хотим войти в систему с помощью sign_in SessionHelper.
Вопрос 1:
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
С чем я сталкиваюсь, так это с той частью, которая гласит:
Проблема в том, что она совершенно не может решить нашу проблему: с помощью кода статус входа пользователя будет забыт, как только пользователь перейдет на другую страницу.
Я не понимаю, как это правда? Я читаю и понимаю, что добавленный код гарантирует, что @current_user никогда не будет равен нулю. Но я не вижу, как current_user вернется к нулю, если мы только что установили его в 5-й строке.
вопрос 2:
Обновленный код выглядит так:
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
В помощнике Remember_token, почему он использует cookies.signed [] вместо cookies.permanent.signed [] и почему он не использует оператор || =, о котором мы только что узнали?
Вопрос 3:
Зачем нам нужно authenticate_with_salt? Если я аутентифицирую & sign_in могу видеть атрибуты id & salt от пользователя, который был передан ему, зачем нам его дважды проверять? Какая ситуация вызовет путаницу?