gpt4 book ai didi

python - Google oAuth 2.0 API 身份验证错误 : Error 400 - redirect_uri_mismatch (does not comply with policy) DJANGO APP

转载 作者:行者123 更新时间:2023-12-04 17:15:48 24 4
gpt4 key购买 nike

我正在尝试让我的 google 身份验证在请求 Gmail 和日历数据的 Django 应用程序上工作。我已经在 Google 开发人员控制台中设置了 oAuth API 并将其与我的项目相关联,并且我已经三重检查了我的重定向 URI 与代码中的完全匹配(HTTP 与 HTTPS 没有错误,斜线也没有任何不一致) )。我确保我的 key 、 secret key 、ClientID 和 Client Secret 在我的 Django 应用程序的管理页面中全部配置且相同。我遵循了许多 youtube 教程并搜索了有关堆栈溢出的其他问题,但身份验证仍然无法正常工作。我收到错误 400:redirect_uri_mismatch。尽管我已经检查了很多次以确认它们是相同的。
从所有教程中,我了解到此错误有两个主要来源:

  • 服务器端(可以在云托管开发者控制台中修复)
  • 客户端(可以通过更改代码来修复)

  • 这两个错误都有自己的个性化消息,说明它是哪种类型的不匹配。
    然而,我的却是这样说的:您无法登录此应用程序,因为它不符合 Google 的 OAuth 2.0 政策。\n\n如果您是应用开发者,请在 Google Cloud Console 中注册重定向 URI。
    这是一张照片
    Google Authentication error message

    from django.shortcuts import render, redirect
    from django.http import HttpRequest
    from google_auth_oauthlib.flow import Flow
    from google.auth.transport.requests import Request
    from googleapiclient.discovery import build
    from .models import CredentialsModel
    from django.conf import settings
    from django.core.exceptions import ObjectDoesNotExist
    import os


    os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
    os.environ['OAUTHLIB_RELAX_TOKEN_SCOPE'] = '1'
    #Scopes are what we should be allowed to access
    SCOPES = ['https://mail.google.com/', 'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile', 'openid']


    """
    IF HAVING ISSUES WITH ANON USER:
    Make sure you are on 127.0.0.1:8000, not localhost, both from the test-page and
    the callback page. For some reason they are treated as different sessions and thus will have
    issues maintaining a logged in user
    """

    def oauth2callback(request):
    activeUser = request.user
    #URL is what we need to use for authentication
    authorization_response = request.build_absolute_uri()
    flow = Flow.from_client_secrets_file(
    settings.GOOGLE_OAUTH2_CLIENT_SECRETS_JSON,
    scopes=SCOPES,

    #This is where we are redirected after authentication
    redirect_uri='http://127.0.0.1:8000/google/oauth2callback')
    #Now get proper token
    flow.fetch_token(authorization_response = authorization_response)
    #print(request.user)
    #Now save in our database
    #print(flow.credentials)
    try :
    my_credential = CredentialsModel.objects.get(pk = activeUser)
    except ObjectDoesNotExist:
    CredentialsModel.objects.create(id = activeUser, credential = flow.credentials)
    else:
    my_credential.credential = flow.credentials
    my_credential.save()

    return redirect(flow.redirect_uri) #activeUser.get_absolute_url())

    最佳答案

    谷歌的文档在这方面不清楚(也可能是谷歌端的一个错误):
    转到您的 GCP 控制台,在 OAuth consent screen 下,当Publishing statusIn production ,我们还是可以放http://localhost:8080/oauth-authorized/googleAuthorized redirect URIs没有触发红色错误消息说 Invalid Redirect . 但是,除非应用程序位于 Testing 中,否则它不起作用地位。
    enter image description here
    所以为了在 http://127.0.0.1:8000 测试您的应用程序,您需要将您的 GCP 应用带到 Testing地位
    enter image description here

    关于python - Google oAuth 2.0 API 身份验证错误 : Error 400 - redirect_uri_mismatch (does not comply with policy) DJANGO APP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68764885/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com