【问题标题】:How to access current_user with devise-token_authenticatable gem?如何使用 devise-token_authenticable gem 访问 current_user?
【发布时间】:2020-03-22 06:47:52
【问题描述】:

我正在处理一个在 Rails/GraphQL/Apollo/React 设置中使用 devisedevise-token_authenticatable 的小项目。项目使用webpacker 设置,因此前端和后端都来自同一个域。登录、注册、注销都由前端(React)处理。我还需要指出,这不仅仅是一个 API 应用程序。

看来,服务器没有设置 current_user 或正确的 cookie,我遇到了网络错误。

Heroku 日志显示以下错误:

NoMethodError (undefined method `authentication_token' for #<User:0x000055ca6c0e4c50>)

这是否意味着它在 nil 类上尝试“authentication_token”方法?

同时在控制台显示这个错误:

Network error: Unexpected token < in JSON at position 0 (I have no idea what this is)

在我的登录组件的登录突变中,我在成功登录后将用户的 authentication_token 存储在本地存储中,在我的 Apollo 设置中,我从存储中检索它并将其附加到每个请求中。但是 Chrome 开发工具的网络选项卡显示在响应标头中登录后我没有得到设计设置的 cookie。我对这一切都很陌生,所以不确定这是问题所在还是其他原因。 PS:我没有使用设计会话,因为登录是在从端处理的。我的路线中有devise_for: users, skip: :sessions

代码 sn-ps:

Apollo Provide

Component UserInfo

SignIn mutation

非常感谢任何帮助。提前感谢您的帮助。

更新:问题已解决:(有关其他信息,另请参阅下面的回答)

问题已通过在application_controller.rb 中添加current_user 私有方法得到解决。

这是代码...

def current_user
 token = request.headers["Authorization"].to_s
 User.find_for_database_authentication(authentication_token: token)
end

【问题讨论】:

    标签: ruby-on-rails devise graphql react-apollo devise-token-auth


    【解决方案1】:

    Marko Kacanski 是对的,我应该详细说明我的发现以及我是如何修复它的。 :-(

    我错误地认为当 gem devise-token_authenticatable 在标头中检测到 authentication_token 时,它会自动发送 current_user。至少在我设置项目的方式上,我没有得到预期的current_user,而是得到了一个 nil 对象。

    所以...我在application_controller.rb 中创建了一个current_user 私有方法,它解决了这个问题。

    这是代码...

    def current_user
     token = request.headers["Authorization"].to_s
     User.find_for_database_authentication(authentication_token: token)
    end
    

    【讨论】:

      【解决方案2】:

      解决了这个问题。它与 GraphQl/Apollo 代码无关。谢谢

      【讨论】:

      • 也许您可以与社区的其他人分享解决方案?
      • 谢谢,我正在处理类似的问题,您的解决方案真的很有帮助! :) 如果您编辑原始问题,我将能够对其进行投票,因为它现在有一个非常有用的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 2012-03-21
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多