【发布时间】:2021-06-30 18:58:57
【问题描述】:
我正在尝试使用 react native ios 和 android 执行社交身份验证(使用 Google),后端使用 Django。请注意,这里不涉及火力基地。
问题概述
当用户通过 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) Web 应用程序(ClientId + Secrete)
- B) Android(仅限 ClientId)
- C) iOS(仅 ClientId)
在前端(React Native Google 登录)
async componentDidMount () {
GoogleSignin.configure({
webClientId: 'ABC-123', (i.e. A above)
iosClientId: 'ABC-456', (i.e. C above)
});
}
在后端 (Django Allauth)
根据谷歌文档设置了 1 个模型对象,Google,A) Web 应用程序 (ClientId + Secrete)
用户通过前端登录
当用户在手机、Android 或 iOS 上的应用中通过 google 进行身份验证时,会返回一个令牌和代码。通过 Django Rest Auth {access_token: 'cdeasdlkjla', code:'adkj'} 发送这个返回 "non_field_errors: ["Incorrect value"]
想法!?
【问题讨论】:
-
据我所知,您在移动端的设置看起来不错。也许你没有正确设置后端。也许this 回答会有所帮助
-
在网页版上,我使用的是“react-google-login”,它返回的 access_token 在后端运行良好。使用相同的设置 iOS/Android 不断失败。我尝试在 alluath 模型设置中交换客户端 ID,但没有成功。
-
谢谢 Kapobajza,问题是反应原生谷歌登录在初始步骤产生 id_token,而不是 access_token。 id_token =/= access_token。只需几行额外的代码即可获得 access_token。现在一切都好!
标签: react-native django-allauth django-rest-auth