解决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
相关产品推荐
相关产品推荐

