session[:session_token]
我的想法是否正确。这是存储在浏览器中的“cookie”吗?
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
helper_method :current_user, :signed_in?
private
def current_user
@current_user ||= User.find_by_session_token(session[:session_token])
end
def signed_in?
!!current_user
end
def sign_in(user)
@current_user = user
session[:session_token] = user.reset_token!
end
def sign_out
current_user.try(:reset_token!)
session[:session_token] = nil
end
def require_signed_in!
redirect_to new_session_url unless signed_in?
end
end
到目前为止,我的理解是当浏览器/客户端向Rails发送一个请求时,cookie(使用session[:session_token]
)也被发送过去,因此使得current_user
方法可以找到用户。我的理解正确吗?这让我感到奇怪,因为我们在ApplicationController中声明会话cookie时,我并不清楚浏览器/客户端如何确切地获得访问权限(Rails方面)。
cookies [:login] = {value:“XJ-122”,expires:1.week.from_now}
将持续一周,而session [:login] =“XJ-122”
将持续整个会话(通常在用户退出浏览器时重置)。参考:http://api.rubyonrails.org/v5.1/classes/ActionDispatch/Cookies.html - lucasarruda