FastAPI中Google Auth2回调后Cookie无法设置的问题排查
以下是针对你遇到的问题的几个关键修复点:
1. 统一域名配置
你当前的回调URL用的是http://localhost:8000/v1/google/callback,但设置Cookie时指定的domain是127.0.0.1——这两个地址在浏览器中会被判定为不同域名,导致Cookie无法被正确保存。
修复方式:
- 统一使用
localhost或127.0.0.1作为所有地址的域名:- 将Google SSO的回调URL改为
http://127.0.0.1:8000/v1/google/callback - 前端跳转地址和Cookie的domain参数也同步为同一域名
- 将Google SSO的回调URL改为
- 或者直接移除
domain参数,让浏览器自动匹配当前请求的域名:response.set_cookie( key=SESSION_COOKIE_NAME, value=access_token, httponly=True, path="/", # 移除domain参数,由浏览器自动适配当前服务域名 )
2. 补充SameSite Cookie属性
跨域重定向场景下(Google认证后跳转回你的服务),浏览器的默认SameSite规则可能会拦截Cookie设置,需要显式配置该属性:
- 本地HTTP开发环境可设置
same_site="Lax":response.set_cookie( key=SESSION_COOKIE_NAME, value=access_token, httponly=True, path="/", same_site="Lax", secure=False # 本地HTTP环境设为False,生产HTTPS环境必须改为True ) - 若前端与后端存在跨域(端口/域名不同),需设置
same_site="None",但该属性必须配合secure=True使用(生产HTTPS环境);部分浏览器要求localhost下也需HTTPS才能启用SameSite=None,此时建议优先采用Lax模式并确保域名统一。
3. 完善回调的Google认证校验
虽然你当前用测试token做验证,但实际场景中需要先完成Google的认证校验,确保回调请求是Google合法重定向回来的,避免隐性逻辑问题。示例补充完整处理逻辑:
@router.get("/callback", tags=['Google SSO']) async def google_callback(request: Request, db: Session = Depends(get_db)): with GoogleSSO( GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, "http://localhost:8000/v1/google/callback", allow_insecure_http=True ) as google_sso: # 验证并获取Google返回的用户信息 user_info = await google_sso.verify_and_process(request) # 替换为实际的access_token生成逻辑 access_token = 'test' response = RedirectResponse(url="http://localhost:3000/home", status_code=status.HTTP_302_FOUND) response.set_cookie( key=SESSION_COOKIE_NAME, value=access_token, httponly=True, path="/", same_site="Lax", secure=False ) return response
内容的提问来源于stack exchange,提问作者Reddspark
相关产品推荐
相关产品推荐

