다음을 확인하십시오 :
def current_user
if (user_id = session[:user_id]) # i.e., if the user is logged in (has a session w/ user's 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])
log_in user
@current_user = user
end
end
end
(sessions_helper.rb에서) - 특히 stateme NT :
if user && user.authenticated?(cookies[:remember_token])
공지 사항, user.authenticated?(cookies[:remember_token])
다음 @current_user
변수 인스턴스를 실패하면 무엇이든지 할당되지 않습니다. 이 경우 @current_user
의 값은 0이됩니다.
>> user = User.create(name: "Michael", email: "[email protected]", password: "foobar", password_confirmation: "foobar")
>> user.remember_token
=> nil
>> user.remember
>> user.remember_token
=> "68ObMQCCdjURdwH0QVEL7w"
>> token = user.remember_token
>> user.authenticated?(token)
=> true
>> user.update_attribute(:remember_digest, User.digest(User.new_token))
>> user.authenticated?(token)
=> false
가 마지막 줄 => true
하려면 :
레일 콘솔에서, 시도, 더 나은 아이디어를 얻으려면
>> user.remember
>> new_token = user.remember_token
>> user.authenticated?(new_token)
=> true
이제 remember
방법부터 다시 session_helper_test.rb에서 찾고 설정에서 호출되었지만 테스트 블록에서 @user.update_attribute(:remember_digest, User.digest(User.new_token))
이후가 아닌 경우 user.authenticated?(user.remember_token)
이 실패 할 것으로 예상 할 수 있습니다. 따라서 if user && user.authenticated?(cookies[:remember_token])
문은 false
이됩니다. 따라서 @current_user
은 절대로 값이 주어지지 않으므로 nil
이됩니다.
아마도'remember (@user)''메소드는 이미 쿠키에'''remember_digest''와''remember_token''을 만들었습니다. ''remember_digest'''가 새로운 정보로 갱신되면 더 이상''remember_token'''과 일치하지 않습니다. 그냥 추측하십시오. 나는 아직도 매우 혼란 스럽다. 나는 초보자이지만 여전히 많은 것을 이해해야한다 ;-) –