You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask使用Oauthlib实现Facebook登录的重定向问题求助

解决Flask中Facebook登录重定向URI不匹配问题

问题根源

你生成的授权请求中,redirect_uri出现了连续双斜杠:https://127.0.0.1:5000/user/facebook//auth,但Facebook开发者后台配置的是https://127.0.0.1:5000/user/facebook/auth,路径不一致导致验证失败。

解决步骤

1. 修正回调URL生成方式

不要手动拼接URL,改用Flask的url_for函数生成绝对URL,自动处理斜杠问题:

修改facebook视图函数:

from flask import url_for  # 确保导入url_for

@users_view.route('/facebook/')
def facebook():
    credentials = current_app.config['OAUTH_CREDENTIALS']['facebook']
    f_client = WebApplicationClient(credentials['id'])
    authorization_endpoint = 'https://www.facebook.com/dialog/oauth'

    # 用url_for生成标准的回调绝对URL
    redirect_uri = url_for('users_view.facebook_callback', _external=True)
    request_uri = f_client.prepare_request_uri(
        authorization_endpoint,
        redirect_uri=redirect_uri,
        scope=["email"],
        auth_type = "reauthenticate",
    )
    print("REQUEST: {}".format(request_uri))
    return redirect(request_uri)

同时,在facebook_callback函数中保持redirect_url一致:

@users_view.route("/facebook/auth")
def facebook_callback():
    credentials = current_app.config['OAUTH_CREDENTIALS']['facebook']
    f_client = WebApplicationClient(credentials['id'])
    token_endpoint = 'https://graph.facebook.com/oauth/access_token'
    code = request.args.get("code")

    # 同样用url_for生成匹配的redirect_url
    redirect_url = url_for('users_view.facebook_callback', _external=True)
    token_url, headers, body = f_client.prepare_token_request(
        token_endpoint,
        authorization_response=request.url,
        redirect_url=redirect_url,
        code=code   
    )
    print("ALL: url:{} headers:{} body:{} ".format(token_url, headers, body))
    # 后续登录逻辑处理...

2. 验证URI一致性

确保Facebook开发者后台配置的重定向URI,和url_for生成的URL完全匹配:

  • 协议一致:本地测试用https的话,后台也要配置对应https的URI
  • 域名、端口一致:必须和Flask服务运行地址完全相同(比如127.0.0.1:5000)
  • 路径无冗余:确保没有多余斜杠或缺失的路径段

补充说明

手动拼接URL时,request.base_url会包含当前路由末尾的斜杠(你的路由是/facebook/),拼接/auth后就会出现//auth的错误路径。url_for会自动遵循Flask的路由规则生成标准URL,从根源避免这类问题。

内容的提问来源于stack exchange,提问作者ussrback

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:05:43