问题描述
我正在尝试使用 react native ios 和 android 执行社交身份验证(使用 Google),后端使用 Django。请注意,此处不涉及 Firebase。
问题概览
当用户通过 google 进行身份验证时,前端的 React Native Google Signin 会返回 (i) access_token 和 (2) 代码。使用django rest auth,我们向后端服务器发送一个post请求,返回“non_field_errors: ["Incorrect value"]
使用的插件:
过程
Google Cloud Console 设置(OAuth 2.0 客户端 ID):
在 Google Cloud Console 中设置了 3 种类型
- A) 网络应用程序(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)
Google 设置了 1 个模型对象,根据 Google 文档使用 A) Web 应用程序 (ClientId + Secrete)
当用户在其手机、Android 或 iOS 上的应用程序中使用 Google 进行身份验证时,会返回令牌和代码。通过 Django Rest Auth {access_token: 'cdeasdlkjla',code:'adkj'} 发送返回“non_field_errors: ["Incorrect value"]
想法!?
解决方法
在@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
或者:
- 前端:React Native Google Sigin 只需一小步即可生成访问令牌。概述如下,第4步
How to get accessToken of React Native GoogleSignIn?
最佳解决方案是 2