如何解决如何在 devise_token_auth 中成功 Oauth2 授权后将登录信息发送到前端?
我使用 devise_token_auth 进行电子邮件和基于 Google Oauth2 的身份验证(为此使用了 omniauth-google-oauth2
gem)。我已经成功地存储了用户通过 Google Oauth2 流程注册/登录的登录信息。信息包括:
{"auth_token"=>"token here","client_id"=>"client id here","uid"=>"uid here","expiry"=>1620492005,"config"=>nil,"oauth_registration"=>true}
以上信息的流程是
- 访问 http://localhost:3000/auth/google_oauth2。这会将您重定向到 Google 身份验证屏幕
- 用户选择帐户并授予权限。
- 来自我的应用的 Oauth 成功回调在 http://localhost:3000/auth/google_oauth2/callback 处执行
第一步执行的代码是
module DevisetokenAuth
class OmniauthCallbacksController < DevisetokenAuth::ApplicationController
attr_reader :auth_params
before_action :validate_auth_origin_url_param
def omniauth_success
get_resource_from_auth_hash
set_token_on_resource
create_auth_params
if confirmable_enabled?
# don't send confirmation email!!!
@resource.skip_confirmation!
end
sign_in(:user,@resource,store: false,bypass: false)
@resource.save!
yield @resource if block_given?
render_data_or_redirect('deliverCredentials',@auth_params.as_json,@resource.as_json)
end
end
end
我面临的问题:
-
sign_in
方法调用没有设置@current_user
,尽管@resource
和@auth_params
包含所有必要的信息。 - 如何将登录信息(令牌、client_id、uid)通知我的前端应用?
render_data_or_redirect('deliverCredentials',@resource.as_json)
此调用不会重定向或呈现任何内容,而是停留在其显示的 URL 为 http://localhost:3000/auth/google_oauth2/callback# 的同一页面上
我现在基本上有三个问题:
- 如何使用
devise_token_auth
根据传入的身份验证标头设置current_user
? 我已将以下行添加到我的控制器中,但仍然无法设置@current_user
include DevisetokenAuth::Concerns::SetUserByToken
也许是因为我发送的身份验证标头不正确?请参阅下面我的第三点。
- 将
devise_token_auth
与电子邮件一起用作身份验证提供程序时,我必须发送 3 个部分才能发出经过身份验证的请求,即access-token
、client_id
和uid
- 现在,对于 Google/Facebook 等提供商,我是否设置所有这些标头?
- 在标头中发送
access-token
、client_id
和uid
- 在授权标头中发送
Bearer my_token
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。