Rails中的当前用户



我有一个问题,我是Rails的新手,我不确定什么是正确的。

  def current_user
   return unless params[:user_id]
   @current_user ||= User.find(params[:user_id])
 end

所以像这样我得到了当前用户。Rails检查参数中的user_id。

但如果我在/users/:id路线上有这样的东西怎么办那么params是id而不是user_id,这就是为什么它有时无法正确设置时区的原因。如何处理这样的事情?

 def set_time_zone(&block)
    if params[:user]
      Time.use_zone(params[:user][:time_zone], &block)
    else
      time_zone = current_user.try(:time_zone) || 'UTC'
      Time.use_zone(time_zone, &block)
    end
end

您可以覆盖UsersController中的current_user,以便它查看id参数而不是user_id。或者,您可以使用现有的方法和类似的回退:

@current_user ||= User.find_by_id(params[:user_id]) || User.find_by_id(params[:id])

不过我要提醒你不要把params[:id]视为理所当然。如果我的用户id是5,没有什么可以阻止我访问/users/6

在我迄今为止看到的所有rails应用程序中,current_user代表当前登录的用户。当前登录用户的id决不能通过params发送,而是通过session发送(因为每个人都可以操作参数)。

  1. 用户通过表单提交用户名/密码
  2. 控制器验证用户名/密码是否匹配以及是否正确
  3. 将用户的id设置为会话

然后你可以有

def current_user
  @current_user ||= begin
    User.find(session[:user_id]) if session[:user_id]
  end
end

在您的应用程序控制器中。

相关内容

  • 没有找到相关文章

最新更新