ruby-on-rails - 如何使用 devise-token_authenticable gem 访问 current_user?
问题描述
我正在开发一个正在使用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
我的路线。
代码片段:
非常感谢任何帮助。预先感谢您的帮助。
更新:问题已解决:(有关其他信息,另请参阅下面的答案)
通过current_user
在application_controller.rb
.
这是代码...
def current_user
token = request.headers["Authorization"].to_s
User.find_for_database_authentication(authentication_token: token)
end
解决方案
Marko Kacanski 是对的,我应该详细说明我的发现以及我是如何修复它的。:-(
我错误地认为当 gem 在标头中检测到 a 时它会current_user
自动发送。至少按照我设置项目的方式,我没有得到预期的结果,而是得到了一个 nil 对象。devise-token_authenticatable
authentication_token
current_user
所以...我在其中创建了一个current_user
私有方法application_controller.rb
,它解决了这个问题。
这是代码...
def current_user
token = request.headers["Authorization"].to_s
User.find_for_database_authentication(authentication_token: token)
end
推荐阅读
- amazon-web-services - 是否可以使用 cdk 1.32 将安全组添加到 AWS 中的 Fargate 服务?
- javascript - 如何使用 Leaflet 更改每个图层上的地图标记颜色?
- python - 为什么 (3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6) = 7?
- android - Android Studio 在 MainActivity.kt 中找不到 TextView 引用(来自设计)
- excel - 在excel代码搜索功能中使用[start num]
- python - 如何将用户输入存储到字典中
- typescript - 修复“变量在分配之前使用”错误
- pyspark - Pyspark 代码,用于查看所有浮点数是否最后都有 .0
- assembly - 使用 MOV 和 JMP 的汇编替代方案
- r - 使用 reticulate 在新环境中访问 R 对象