React Native Google Authenticate with Django Allauth 返回 "Incorrect value" (iOS/Android)



我正在尝试使用react原生ios和android执行社交身份验证(使用谷歌(,Django在后端。请注意,这里没有涉及任何燃烧基地。

问题概述

前端的React Native Google Signin在用户通过Google进行身份验证时返回(i(access_token和(2(代码。使用django-rest-auth,我们向后端服务器发送一个post请求;non_field_errors:["值不正确"]返回

使用的插件:

React Native Google Sigin

Django All Auth

Django Rest Auth

过程

谷歌云控制台设置(OAuth 2.0客户端ID(

谷歌云控制台中设置了3种类型

  • A(Web应用程序(ClientId+Secrete(
  • B( Android(仅ClientId(
  • C( iOS(仅ClientId(

在前端(React Native Google Signin(

async componentDidMount () {
GoogleSignin.configure({
webClientId: 'ABC-123',    (i.e. A above)
iosClientId: 'ABC-456',    (i.e. C above)
});

}

在后端(Django Allauth(

根据谷歌文档,设置了1个模型对象,带有A(Web应用程序(ClientId+Secrete(

用户通过前端登录

当用户在手机、Android或iOS上使用谷歌应用程序进行身份验证时,会返回一个令牌和代码。通过Django Rest Auth发送此消息{access_token:'cdeasdlkjla',代码:'adkj'}返回"non_field_errors:["值不正确"]

想法!?

在@Kapobajza响应的帮助下,我发现了问题。

Django AllAuth Google Social Auth接受"access_token">

React Native Google Sigin的默认值为"id_token">

请注意,"access_token"=/="id_token’

因此,有两种解决方案:

  1. 后台:Django AllAuth应该支持id_token。在撰写本文时,它没有。下面的链接中有一个开放的票证,这导致了一种手动支持它的方法https://github.com/pennersr/django-allauth/issues/1983

或者:

  1. FrontEnd:React Native Google Sigin只需一小步就可以生成访问令牌。概述如下,步骤4

如何获取React Native GoogleSignIn的accessToken?

最佳解决方案是2

最新更新