我最近一直在环顾Rails并注意到current_user
有很多引用。这只来自Devise吗?即使我使用Devise,我是否必须自己手动定义?是否有使用current_user
的先决条件(如会话,用户等的存在)?
答案 0 :(得分:72)
它由几个宝石定义,例如:设计
您需要将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
。
更新:当没有当前用户时,请避免其他数据库查询。
答案 1 :(得分:8)
是的,current_user
使用session
。如果要进行自己的身份验证,可以在应用程序控制器中执行类似的操作:
def current_user
return unless session[:user_id]
@current_user ||= User.find(session[:user_id])
end