【问题标题】:Finding the current user in the session in Rails [closed]在 Rails 的会话中查找当前用户 [关闭]
【发布时间】:2020-12-07 15:25:12
【问题描述】:

朋友在这里帮助我; 查看上面屏幕截图中的 current_user 方法,当用户首次登录时,实例变量 @current_user 将被分配 User 对象。但是当发出后续请求时,会测试会话中 user_id 的存在,如果找到,则返回 @current_user 如果先前分配,否则分配并返回。我的问题是:如果@current_user 的先前分配用于确定登录状态,我们如何知道来自新请求的用户与先前分配给@current_user 的用户相同? 非常感谢您的贡献。

【问题讨论】:

标签: ruby-on-rails ruby authentication session


【解决方案1】:

你在这里犯了一个基本的逻辑错误。

控制器实例变量只存在于单个请求的范围内。当请求到达您的 rails 应用程序时,它会将请求与您的路线相匹配。路由提供控制器/动作组合,Rails 使用此信息实例化控制器类的新实例并在其上调用正确的方法。

这段代码实际上并没有以任何方式保存任何东西跨请求:

def current_user
  @current_user ||= User.find_by(id: session[:user_id])
end

而是使用条件赋值来防止在同一个请求中重复运行User.find_by(从而查询数据库)。

这是一种称为记忆的技术。

另一方面,session 在请求之间持续存在,因为它存储在客户端和服务器之间来回传递的 cookie 中。

【讨论】:

  • 感谢您在这里澄清事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多