我在 StackOverflow 上阅读了大量有关此问题的帖子,但没有一个反映我的情况(例如,其他帖子中的解决方案是我已经完成的事情,并且错误仍然存在)。据我所知,我已经按照所有说明进行了操作,但我绝对坚持这个
400 - redirect_uri_mismatch
!
TL;博士:
Python + Django 网络应用程序。
web application
并且未发布。Credentials
,带或不带尾部斜杠。Flow
+ web
-关键字,而不是 InstalledAppFlow
redirect_uri_mismatch
:-(详细信息、屏幕截图、代码等,如下相关。
Testing
模式:您会看到我添加了它的变体,以便我可以尝试所有这些 -
127
和 localhost
,以及带或不带尾部斜杠。
REDIRECT_URI = "http://localhost:8000/dev/test/onboard_finalize"
CLIENT_SECRETS = {
"web": {
"client_id": {CLIENT_ID},
"client_secret": {CLIENT_SECRET},
"redirect_uris": [REDIRECT_URI],
"project_id": {PROJECT_ID},
"auth_provider_x509_cert_url": AUTH_URL,
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token"
}
}
sesh = OAuth2Session(CLIENT_ID, scope=SCOPES, redirect_uri=REDIRECT_URI)
flow = Flow(
oauth2session = sesh,
client_type = "web",
client_config = CLIENT_SECRETS,
redirect_uri = REDIRECT_URI,
code_verifier = self.state,
)
url, state = flow.authorization_url(prompt="select_account")
print("Using REDIRECT_URI:", REDIRECT_URI)
print("Generated URL:", url)
然后得出:
Using REDIRECT_URI: http://localhost:8000/dev/test/onboard_finalize
Generated URL: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=****.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8000%2Fdev%2Ftest%2Fonboard_finalize&scope=openid+profile&state=lVtLKgPPtyhjjpll5Wd8KEnZjSqGty&code_challenge=****&code_challenge_method=S256&prompt=select_account&access_type=offline
然而:
单击模态产量:
Request details:
redirect_uri=http://localhost:8000/dev/test/onboard_finalize
在本例中对应于 Cloud Console 中的 uri #4。
oauthplayground
也不起作用,错误是一模一样的。事实上,对于列出的所有 URI,该错误都是完全相同的。
上述设置没有任何问题,谷歌只是出于某种原因需要“几个小时”以上的时间才能将它们传播到任何需要的地方。很难确切地说需要多长时间,但在我上次测试中,端点已配置了至少 9 个小时。据我所知,大约在 9 到 24 小时之间。