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

解决Flutter iOS端flutter_appauth登出时崩溃的问题

iOS端flutter_appauth登出崩溃的解决方案

1. 移除登出请求中的preferEphemeralSession参数

你在登录和登出都启用了preferEphemeralSession: true,但iOS的临时会话模式会导致登出时视图控制器层级异常——登录用的SFAuthenticationViewController在会话结束后会被销毁,登出时再尝试弹出新的认证控制器就会找不到合法的视图容器,直接触发崩溃。

修改登出代码:

var esr = EndSessionRequest(
    idTokenHint: idToken,
    issuer: '<ommitted from sample>',
    postLogoutRedirectUrl: 'com.myapp.myapp://login-callback',
    allowInsecureConnections: false,
    // 删掉preferEphemeralSession或设为false
    serviceConfiguration: <auth endpoint, token endpoint, end session...>,
);
await appAuth.endSession(esr);

2. 补全Info.plist的必要配置

当前的plist缺少两个关键配置:

  • 完整的URL类型声明
  • 认证服务商的Scheme白名单

更新后的plist片段:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>com.myapp.myapp</string>
        </array>
    </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
    <!-- 添加上你的认证服务对应的Scheme,比如Auth0填auth0,Okta填okta,通用HTTPS服务填https -->
    <string>https</string>
</array>

3. 确保登出操作的触发时机正确

不要在登录流程未完全结束时调用登出,必须等authorizeAndExchangeCode的Future执行完成后,再触发登出逻辑。同时避免在Flutter的弹窗、悬浮层等特殊页面中调用登出,尽量在主页面触发操作,保证视图层级正常。

4. 升级flutter_appauth到最新稳定版

旧版本的插件在iOS端处理临时会话登出时存在已知bug,升级到最新版可以解决很多兼容性问题。在pubspec.yaml中更新依赖:

dependencies:
  flutter_appauth: ^6.0.0 # 替换为当前最新稳定版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:55:26