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

如何通过Amplify Cognito验证用户登录状态及账号有效性?

解决方案

问题根源

Amplify.Auth.currentUser仅读取本地缓存的用户信息,不会主动与Cognito后端校验账号的实际状态(是否被封禁、注销),所以后台操作后本地缓存未更新时,仍会返回非null值。

正确的登录状态校验方式

不要仅依赖本地缓存,需主动与Cognito后端校验会话有效性,推荐使用fetchAuthSession方法,它会验证令牌的合法性及账号状态:

代码示例

fun checkValidAuthState() {
    // 先检查本地是否有缓存用户
    val localUser = Amplify.Auth.currentUser
    if (localUser == null) {
        // 无本地缓存,直接跳登录页
        navigateToAuthScreen()
        return
    }

    // 主动与后端校验会话有效性
    Amplify.Auth.fetchAuthSession(
        { sessionResult ->
            if (sessionResult.isValid) {
                // 会话有效,账号状态正常,进入主应用
                navigateToMainApp()
            } else {
                // 会话无效,清除本地缓存并跳登录页
                Amplify.Auth.signOut()
                navigateToAuthScreen()
            }
        },
        { error ->
            // 校验失败(如账号被封禁、token失效等),清除缓存并跳登录页
            Amplify.Auth.signOut()
            navigateToAuthScreen()
        }
    )
}

// 辅助导航方法(根据你的应用框架实现)
fun navigateToMainApp() { /* ... */ }
fun navigateToAuthScreen() { /* ... */ }

自动登录的最优实现

不需要保存用户名和密码,Amplify会自动缓存有效的refresh token,应用启动时通过该令牌刷新会话即可实现自动登录:

  • 首次登录成功后,Amplify会在本地存储refresh token、access token等信息
  • 应用重启时,调用fetchAuthSession会自动用refresh token向Cognito请求新的access token
  • 如果refresh token有效且账号状态正常,就能完成自动登录;若token失效或账号被封,会触发错误回调,此时清除缓存并引导用户重新登录

关键注意事项

  • 禁止明文存储用户名和密码,避免安全风险,依赖Amplify的令牌缓存机制即可
  • 当Cognito后台封禁/注销用户时,对应的refresh token会立即失效,fetchAuthSession会返回错误,此时需清除本地缓存并跳转登录页

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:46:24