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

AWS Amplify Auth登录会话应用重启后无法持久化的原因?

AWS Amplify登录会话无法在应用重启后持久化问题排查

我的Amplify配置代码

do {
    Amplify.Logging.logLevel = .verbose
    try Amplify.add(plugin: AWSCognitoAuthPlugin())
    try Amplify.add(plugin: AWSS3StoragePlugin())
    try Amplify.add(plugin: apiPlugin)
    try Amplify.configure()
    print("Initialized Amplify")
} catch {
    print("Could not initialize Amplify: \(error)")
}

登录状态检查代码

do {
    let session = try await Amplify.Auth.fetchAuthSession()
    switch session.isSignedIn {
    case true:
        DZLog("Signed in")
    case false:
        DZLog("Not signed in")
    }
} catch {
    DZError("Error while fetching session", error: error)
}

登录实现代码

do {
    let options = AuthWebUISignInRequest.Options(scopes: ["openid", "email", "profile", "aws.cognito.signin.user.admin"], pluginOptions: AuthWebUISignInRequest.Options.preferPrivateSession())
    let signInResult = try await Amplify.Auth.signInWithWebUI(for: .apple, presentationAnchor: window, options: options)
    if signInResult.isSignedIn {
        print("Sign in succeeded")
    }
} catch let error as AuthError {
    DZError("Error in signin", error:error)
} catch {
    DZError("Error in signin", error:error)
}

问题描述

应用重启后,调用Amplify.Auth.fetchAuthSession()始终返回未登录状态,登录会话无法在重启间保持持久化。


问题原因及解决方案

原因

你在登录时使用了AuthWebUISignInRequest.Options.preferPrivateSession()插件选项。该选项会让Web UI登录流程使用私有浏览器会话,而私有会话的设计逻辑就是不持久化存储用户凭证——会话结束(如关闭浏览器、重启应用)后,凭证会被自动清除,导致应用重启后无法恢复登录状态。

解决方案

移除preferPrivateSession()这个插件选项,修改后的登录代码如下:

do {
    let options = AuthWebUISignInRequest.Options(scopes: ["openid", "email", "profile", "aws.cognito.signin.user.admin"])
    let signInResult = try await Amplify.Auth.signInWithWebUI(for: .apple, presentationAnchor: window, options: options)
    if signInResult.isSignedIn {
        print("Sign in succeeded")
    }
} catch let error as AuthError {
    DZError("Error in signin", error:error)
} catch {
    DZError("Error in signin", error:error)
}

如果业务场景确实需要使用私有会话,无法依赖Amplify自动持久化登录状态,需手动实现凭证的存储与恢复逻辑,但这违背私有会话的设计初衷,不推荐该做法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:15:28