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

使用flutter_appauth实现OAuth2时登录成功后无法跳转至Flutter应用

解决flutter_appauth重定向失败及scheme不被允许问题

1. 修复重定向URI格式错误

你代码里的重定向URI写的是com.app.app:/oauthredirect,这里用了单斜杠,不符合标准URI格式,正确写法应该是双斜杠:com.app.app://oauthredirect。格式错误会导致flutter_appauth无法识别scheme,同时后端Django OAuth2 Toolkit也会拒绝该重定向地址。

修改oauth2.dart中的参数:

AuthorizationTokenRequest(
  'client_id',
  'com.app.app://oauthredirect', // 替换为双斜杠格式
  // 其余配置保持不变
),

2. 配置Django OAuth2 Toolkit允许自定义Scheme

Django OAuth2 Toolkit默认只放行http/https协议的重定向URI,自定义app scheme(如com.app.app)需要手动加入允许列表。

在Django项目的settings.py中添加配置:

OAUTH2_PROVIDER = {
    # 保留原有配置...
    'ALLOWED_REDIRECT_URI_SCHEMES': ['com.app.app'],
}

添加完成后重启Django服务,确保后端已生效该配置。

3. 检查Android端Intent Filter配置

虽然你在build.gradle中配置了appAuthRedirectScheme,但需确保AndroidManifest.xml中存在对应的intent-filter(若自动生成失败则手动补充):

打开android/app/src/main/AndroidManifest.xml,在主<activity>标签内添加:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="com.app.app" android:host="oauthredirect" />
</intent-filter>

该配置会让系统识别到com.app.app://oauthredirect地址时,唤起你的Flutter应用。

4. 解决discoveryUrl崩溃问题

之前使用discoveryUrl时应用崩溃,大概率是以下原因:

  • 后端OpenID配置文档(/.well-known/openid-configuration)返回内容不符合标准格式,或端点地址错误
  • 模拟器访问10.0.2.2时网络不通,需确认后端服务正常运行、端口正确

先在浏览器中访问http://10.0.2.2:8000/api/oauth2/.well-known/openid-configuration,验证返回的JSON中authorization_endpoint和token_endpoint与你手动配置的一致。确认无误后,再尝试启用discoveryUrl:

discoveryUrl: "http://10.0.2.2:8000/api/oauth2/.well-known/openid-configuration",
// 注释掉serviceConfiguration相关代码

验证步骤

  1. 重启Flutter应用与Django服务
  2. 点击登录按钮完成网页端登录后,应自动跳转回Flutter应用,控制台会打印token信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 01:03:27