【发布时间】:2020-03-22 06:47:52
【问题描述】:
我正在处理一个在 Rails/GraphQL/Apollo/React 设置中使用 devise 和 devise-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:
非常感谢任何帮助。提前感谢您的帮助。
更新:问题已解决:(有关其他信息,另请参阅下面的回答)
问题已通过在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