微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

React Native Google Authenticate with Django Allauth 返回“不正确的值”iOS/Android

如何解决React Native Google Authenticate with Django Allauth 返回“不正确的值”iOS/Android

我正在尝试使用 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"]

使用的插件

React Native Google Sigin

Django All Auth

Django Rest Auth

过程

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'

因此,有两种解决方案:

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

或者:

  1. 前端:React Native Google Sigin 只需一小步即可生成访问令牌。概述如下,第4步

How to get accessToken of React Native GoogleSignIn?

最佳解决方案是 2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。