【问题标题】:Problems to find current user rails查找当前用户 rails 的问题
【发布时间】:2011-08-25 10:38:49
【问题描述】:

我想找到当前登录的用户。 我在应用程序控制器中使用这种方法:

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

我可以从控制器中的 show 方法访问 current_user,但在任何其他方法中它都是 nil。 这很奇怪,因为它以前可以工作,现在我不知道我做了什么,但它不再工作了。 谁能帮帮我?

【问题讨论】:

  • 您的应用程序控制器中是否还有helper_method :current_user
  • 尝试找出是否为 nil,因为 session[:user_id] 为 nil 或其他原因,在特殊情况下。
  • session[:user_id] 的行为与 current_user 完全一样:它可以通过 show 方法访问,并且在其他地方为零。
  • 试试current_user@current_user
  • @current_user 即使在 show 方法中也为零。我不认为这是问题所在,但我不明白的是它在 show 方法中是如何工作的,当我尝试从同一个控制器中的另一个方法访问它时它是 nil?

标签: ruby-on-rails ruby model-view-controller


【解决方案1】:

鉴于您的最后评论,您的问题仅与会话有关。与你定义的current_user方法无关。

默认情况下,当 HTTP POST 请求中没有身份验证令牌时,Rails 3 应用程序会重置会话。 Rails 4 的行为略有不同(取决于配置),但最终您会遇到类似的问题。

我猜你的 ajax 查询不包含身份验证令牌,因此警告 WARNING: Can't verify CSRF token authenticity,因此是空会话。对于空会话,您的 current_user 方法将始终返回 nil,除非您在 GET 请求中并且自身份验证以来未发出任何 POST 请求。

我不在这里写解决方案,因为它并不简单(它取决于您使用的 javascript 框架)并且它与您的原始问题没有链接。

你应该阅读这个问题的答案:WARNING: Can't verify CSRF token authenticity rails

【讨论】:

    猜你喜欢
    • 2012-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多