Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native React Native Google Authentication with Django Allauth returns“;“值不正确”;(iOS/Android)_React Native_Django Allauth_Django Rest Auth - Fatal编程技术网

React native React Native Google Authentication with Django Allauth returns“;“值不正确”;(iOS/Android)

React native React Native Google Authentication with Django Allauth returns“;“值不正确”;(iOS/Android),react-native,django-allauth,django-rest-auth,React Native,Django Allauth,Django Rest Auth,我正在尝试使用react原生ios和android,在后端使用Django(谷歌)执行社会身份验证。注意,此处不涉及firebase 问题概述 前端的React Native Google Signin在用户通过Google身份验证时返回(i)access_令牌和(2)代码。使用django rest auth,我们向后端服务器发送post请求,并返回“非字段错误:[”错误值“] 使用的插件: 过程 谷歌云控制台设置(OAuth 2.0客户端ID): 谷歌云控制台中设置了3种类型 A)

我正在尝试使用react原生ios和android,在后端使用Django(谷歌)执行社会身份验证。注意,此处不涉及firebase

问题概述

前端的React Native Google Signin在用户通过Google身份验证时返回(i)access_令牌和(2)代码。使用django rest auth,我们向后端服务器发送post请求,并返回“非字段错误:[”错误值“]

使用的插件:

过程

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

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

  • A) Web应用程序(ClientId+Secret)
  • B) Android(仅限ClientId)
  • C) iOS(仅限客户端ID)
在前端(React Native Google Signin)

}

在后端(Django Allauth)

根据谷歌文档,1个模型对象被设置为Google,带有一个Web应用程序(ClientId+Secret)

用户通过前端登录

当用户在手机、Android或iOS上使用google in app进行身份验证时,将返回一个令牌和代码。通过Django Rest Auth{access_令牌:'cdeasdlkjla',代码:'adkj'}发送此令牌和代码将返回“非字段错误:[“错误值”]


思想

在@Kapobajza回复的帮助下,我发现了这个问题

Django AllAuth Google Social Auth接受“访问令牌”

React Native Google Sigin的默认值为“id_token”

请注意,“访问\u令牌”=/=“id\u令牌”

因此,有两种解决方案:

  • 后端:Django AllAuth应该支持id_令牌。在撰写本文时,它没有。 在下面的链接中有一个打开的票证,这导致了一种手动支持它的方法
  • 或:

  • 前端:React Native Google Sigin只需一小步就可以生成一个访问令牌。其概述如下,第4步

  • 最好的解决方案是2

    据我所知,您在移动端的设置看起来不错。可能您没有正确设置后端。也许这个答案对网络版很有帮助,我使用的是“react google login”,它返回的访问令牌在后端运行良好。在相同的设置下,iOS/Android操作系统不断失败。我尝试在alluath模型设置中交换clientID,但没有成功。谢谢Kapobajza,问题是本地google signin在初始步骤生成id_令牌,而不是access_令牌。id\u令牌=/=访问\u令牌。只需要几行额外的线路就可以获得访问令牌。现在一切都好了!
       async componentDidMount () {
    GoogleSignin.configure({
      webClientId: 'ABC-123',    (i.e. A above)
      iosClientId: 'ABC-456',    (i.e. C above)
    });