Swift - AWS Cognito 使用 Amplify - 如何在 swift 登录后获取令牌?
Posted
技术标签:
【中文标题】Swift - AWS Cognito 使用 Amplify - 如何在 swift 登录后获取令牌?【英文标题】:Swift - AWS Cognito using Amplify - How to get tokens after log in in swift? 【发布时间】:2021-10-25 14:37:36 【问题描述】:成功登录后,我正在努力获取用户令牌。 我唯一得到的是当前的 userId 和用户名,但我无法获得用户令牌。
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?.getCurrentUser()
debugPrint("Sign in succeeded")
case .failure(let error):
debugPrint("Sign in failed \(error)")
self?.authStateDelegate?.authState(state: .error(error: error))
func getCurrentUser()
guard let user = Amplify.Auth.getCurrentUser() else return
self.authStateDelegate?.authState(state: .session(user: user))
【问题讨论】:
【参考方案1】:在您登录成功回调后,您可以执行以下操作:
Amplify.Auth.fetchAuthSession result in
switch result
case .success(let session):
if session.isSignedIn
do
if let cognitoTokenProvider = session as? AuthCognitoTokensProvider
let tokens = try cognitoTokenProvider.getCognitoTokens().get()
//tokens.idToken - is ID token. Access and refresh tokens also can be found here
catch
//error
else
//Not Logged in
case .failure(let error):
print("Fetch session failed with error \(error)")
【讨论】:
谢谢!这正是我所需要的【参考方案2】:这对我有用:
首先,导入AmplifyPlugins
import AmplifyPlugins
和
_ = Amplify.Auth.fetchAuthSession result in
switch result
case .success(let session):
if(session.isSignedIn)
if let sess = session as? AWSAuthCognitoSession
let result = sess.getCognitoTokens()
switch result
case .success(let tokens):
let accessToken = tokens.accessToken
let idToken = tokens.idToken
let refreshToken = tokens.refreshToken
case .failure(let error):
print("Fetch user tokens failed with error \(error)")
case .failure(let error):
print("Fetch session failed with error \(error)")
【讨论】:
以上是关于Swift - AWS Cognito 使用 Amplify - 如何在 swift 登录后获取令牌?的主要内容,如果未能解决你的问题,请参考以下文章
AWS iOS SDK Cognito 开发人员身份验证 (Swift)
AWS Cognito Swift 凭证提供商“不推荐使用登录:使用 AWSIdentityProviderManager”
Swift 中的 AWS Cognito getSession 导致来自 API GW 的 401 未授权
在 DotNet 中创建 AWS Cognito PreSignup Lambda