Answers:
它由几个宝石定义,例如Devise
您需要将user_id存储在某个位置,通常在登录后在会话中。它还假定您的应用具有并且需要用户,身份验证等。
通常,它类似于:
class ApplicationController < ActionController::Base
def current_user
return unless session[:user_id]
@current_user ||= User.find(session[:user_id])
end
end
假设存在User类,例如#{Rails.root}/app/models/user.rb
。
更新:没有当前用户时避免其他数据库查询。
session
内置在Rails中。默认情况下,它使用cookie来维护请求之间的客户端状态。有关更多信息,请参见guides.rubyonrails.org/security.html#sessions。
return unless session[:user_id]
Zach答案中所示的内容-否则,if current_user
注销时的每次检查都会触发另一个数据库查询。
是的,current_user
使用session
。如果要进行自己的身份验证,则可以在应用程序控制器中执行类似的操作:
def current_user
return unless session[:user_id]
@current_user ||= User.find(session[:user_id])
end
session
有点像params
,只是它对于多个请求仍然有效。您可以使用它来存储您的单个用户唯一的任何类型的持久性参数(直到他们的会话过期或他们注销)。您可以在此处了解更多信息:ActionController:访问会话