[英]How to access current_user with devise-token_authenticatable gem?
我的工作是使用一个小的项目devise
和devise-token_authenticatable
在Rails/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.