如何解决在Rails的会话中查找当前用户
朋友们在这里帮助我; 查看上面的屏幕快照中的current_user方法,当用户首次登录时,实例变量@current_user将被分配User对象。但是,当发出后续请求时,将测试会话中user_id的存在,如果找到,则如果先前分配了@current_user,则返回@current_user,否则进行分配并返回。我的问题是:如果使用@current_user的先前分配来确定登录状态,我们如何知道新请求中的用户与先前分配给@current_user的用户相同? 感谢您的贡献。
解决方法
您在这里犯了一个基本的逻辑错误。
控制器实例变量仅存在于单个请求的范围内。当请求到达您的Rails应用程序时,它将请求与您的路线进行匹配。这些路由给出了控制器/动作的组合,Rails使用此信息来实例化控制器类的新实例并在其上调用正确的方法。
此代码实际上不会以任何方式在请求中保留任何 :
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end
相反,它使用条件分配来防止在同一请求 中重复运行User.find_by
(从而查询数据库)。
这是一种称为记忆的技术。
session另一方面在请求之间仍然存在,因为它存储在Cookie中,并在客户端和服务器之间来回传递。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。