繁体   English   中英

如何使用 devise-token_authenticable gem 访问 current_user?

[英]How to access current_user with devise-token_authenticatable gem?

我的工作是使用一个小的项目devisedevise-token_authenticatableRails/GraphQL/Apollo/React设置。 项目是使用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在我的路线中。

代码片段:

阿波罗提供

组件用户信息

登录突变

非常感谢任何帮助。 预先感谢您的帮助。

更新:问题已修复:(另请参阅下面的答案以获取更多信息)

通过在application_controller.rb添加current_user私有方法修复了问题。

这是代码...

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

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

修复了问题。 它与 GraphQl/Apollo 代码无关。 谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM