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

Swift使用Amplify对接AWS Cognito:登录成功后如何获取用户令牌?

解决方案

你调用的Amplify.Auth.getCurrentUser()接口本身仅返回用户ID、用户名这类基础身份信息,不包含任何令牌类数据,要获取用户令牌需要调用fetchAuthSession接口实现,修改后的参考代码如下:

func login(userData: RegistrationFields) {
    _ = Amplify.Auth.signIn(username: userData.email.data, password: userData.password.data) {
        [weak self] result in
            switch result {
            case .success(let signInResult):
                if signInResult.isSignedIn {
                    self?.fetchUserAuthSession()
                    debugPrint("Sign in succeeded")
                }
            case .failure(let error):
                debugPrint("Sign in failed \(error)")
                self?.authStateDelegate?.authState(state: .error(error: error))
            }
        }
}

// 替换原有getCurrentUser方法,新增令牌获取逻辑
func fetchUserAuthSession() {
    _ = Amplify.Auth.fetchAuthSession { [weak self] result in
        switch result {
        case .success(let session):
            guard let authSession = session as? AWSAuthSession else { return }
            // 获取各类令牌
            let idToken = try? authSession.userPoolTokensResult.get().idToken
            let accessToken = try? authSession.userPoolTokensResult.get().accessToken
            let refreshToken = try? authSession.userPoolTokensResult.get().refreshToken
            
            // 原有获取当前用户逻辑可保留
            guard let user = Amplify.Auth.getCurrentUser() else {return}
            // 可根据需要把令牌信息一起传给代理
            self?.authStateDelegate?.authState(state: .session(user: user, idToken: idToken, accessToken: accessToken))
        case .failure(let error):
            debugPrint("Fetch auth session failed \(error)")
            self?.authStateDelegate?.authState(state: .error(error: error))
        }
    }
}
常见注意点
  • 调用fetchAuthSession时如果出现令牌获取失败的错误,可先调用Amplify.Auth.signOut()清理本地缓存的无效会话,再重新登录测试
  • 如果你使用的是 Amplify V2 版本,接口命名会略有调整,对应读取userPoolTokens属性即可,核心逻辑不变
  • 令牌默认存在过期时间,后端校验令牌过期后可调用刷新令牌接口重新获取有效令牌,不需要用户重新登录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:24:00