我正在尝试使用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’
因此,有两种解决方案:
- 后台:Django AllAuth应该支持id_token。在撰写本文时,它没有。下面的链接中有一个开放的票证,这导致了一种手动支持它的方法https://github.com/pennersr/django-allauth/issues/1983
或者:
- FrontEnd:React Native Google Sigin只需一小步就可以生成访问令牌。概述如下,步骤4
如何获取React Native GoogleSignIn的accessToken?
最佳解决方案是2