"oauth.google.authorize_redirect()" возвращает ошибку 500: "httpx.exceptions.ConnectTimeout"
На самом деле я работаю над платформой, использующей фреймворк starlette с authlib для аутентификации Google OAuth.
С сегодняшнего дня я получаю 500 Internal Server Error
при звонке oauth.google.authorize_redirect(request, redirect_uri)
с ошибкой httpx.exceptions.ConnectTimeout
.
Я совершенно растерян в этом новом образе жизни. Я могу воспроизвести это с помощьюdemo-oauth-client
репозиторий предоставлен authlib
: https://github.com/authlib/demo-oauth-client/tree/master/starlette-google-login
app.py является:
import json
from starlette.config import Config
from starlette.applications import Starlette
from starlette.middleware.sessions import SessionMiddleware
from starlette.responses import HTMLResponse, RedirectResponse
from authlib.integrations.starlette_client import OAuth
app = Starlette(debug=True)
app.add_middleware(SessionMiddleware, secret_key="!secret")
config = Config('.env')
oauth = OAuth(config)
CONF_URL = 'https://accounts.google.com/.well-known/openid-configuration'
oauth.register(
name='google',
server_metadata_url=CONF_URL,
client_kwargs={
'scope': 'openid email profile'
}
)
@app.route('/')
async def homepage(request):
user = request.session.get('user')
if user:
data = json.dumps(user)
html = (
f'<pre>{data}</pre>'
'<a href="/logout">logout</a>'
)
return HTMLResponse(html)
return HTMLResponse('<a href="/login">login</a>')
@app.route('/login')
async def login(request):
redirect_uri = request.url_for('auth')
return await oauth.google.authorize_redirect(request, redirect_uri)
@app.route('/auth')
async def auth(request):
token = await oauth.google.authorize_access_token(request)
user = await oauth.google.parse_id_token(request, token)
request.session['user'] = dict(user)
return RedirectResponse(url='/')
@app.route('/logout')
async def logout(request):
request.session.pop('user', None)
return RedirectResponse(url='/')
if __name__ == '__main__':
import uvicorn
uvicorn.run(app, host='127.0.0.1', port=8000)
А также .env
файл:
GOOGLE_CLIENT_ID=[REDACTED]
GOOGLE_CLIENT_SECRET=[REDCATED]
Есть идеи об этом новом поведении? Я полностью потерялся с этим. Благодарность!!