это просто метод разрешения пользователя по «секретной» соли, что я считаю плохой идеей, поскольку такая информация не должна передаваться кому-либо, даже в зашифрованном виде. Токен аутентификации специального назначения - лучшая идея.

то я следую за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 от пользователя, который был передан ему, зачем нам его дважды проверять? Какая ситуация вызовет путаницу?

Ответы на вопрос(1)

Ваш ответ на вопрос