簡體   English   中英

AWS Cognito Swift SDK如何檢查用戶是否已確認?

[英]AWS Cognito Swift SDK How can I check if a user is confirmed?

我是Cognito的新手。 我剛剛使用提供的示例成功設置了signUp系統,可以使用我的iOS應用程序為用戶注冊。

我要求用戶在注冊期間驗證電子郵件。

他們的數據顯示在Cognito控制台上,在選擇驗證郵件中的鏈接之前,他們的狀態未經證實。

在我的應用程序中,我不希望用戶在驗證他們的電子郵件之前能夠使用該應用程序。

如何檢查用戶何時點擊了電子郵件確認? 我不想在用戶注冊后將用戶路由回登錄頁面。 我將他們帶到一個頁面,他們可以在確認他們的電子郵件后繼續按下。

我嘗試過以下方法:

self.user!.getSession(self.username, password: self.password, validationData: nil).continueWith(block: { (session) -> Any? in
    if (self.user!.confirmedStatus == AWSCognitoIdentityUserStatus.confirmed) {
        print("confirmed")
    } else if (self.user!.confirmedStatus == AWSCognitoIdentityUserStatus.unconfirmed) {
        print("unconfirmed")
    } else if (self.user!.confirmedStatus == AWSCognitoIdentityUserStatus.unknown) {
        print("unknown")
    } else {
        print("elsecase")
    }
    return nil
})

出於某種原因,即使用戶未經證實,也會確認打印。

作為這一切的新手,我真的不確定在我的場景中采用什么方法來查看用戶何時點擊了他們的驗證鏈接。

使用userAttributes數組獲取所有用戶屬性,包括“ email_verified ”標志

在CognitoYourUserPoolSample項目中,UserDetailsTableViewController類有一個名為refresh()的方法,此方法用於在登錄后獲取用戶詳細信息。 我添加了幾行代碼來確定用戶是否確認了電子郵件地址。

  func refresh() {
    self.user?.getDetails().continueOnSuccessWith { (task) -> AnyObject? in
        DispatchQueue.main.async(execute: {
            self.response = task.result
            self.title = self.user?.username
            self.tableView.reloadData()

            // Get user attributes and check the "email_verified" flag
            let attributes = self.response?.userAttributes
            if let emailVerifiedAttribute = attributes?.filter({$0.name == "email_verified"}), emailVerifiedAttribute.count == 1  {
                if (emailVerifiedAttribute[0].value == "false") {
                    print("Email not verified")
                    self.openEmailVerificationVc()
                }else{
                    print("Email  verified")
                }

            }
        })


        return nil
    }
}
func openEmailVerificationVc(){

    user?.getAttributeVerificationCode("email")
    // Show email verification vc here,

}

從電子郵件驗證視圖控制器調用“ verifyAttribute ”方法

var user: AWSCognitoIdentityUser?
var pool: AWSCognitoIdentityUserPool?  

override func viewDidLoad() {
        super.viewDidLoad()

        self.pool = AWSCognitoIdentityUserPool(forKey: AWSCognitoUserPoolsSignInProviderKey)
        if (self.user == nil) {
            self.user = self.pool?.currentUser()
        }



    }
func verifyEmailWithCode(code:String){
    user?.verifyAttribute("email", code: code)
}

您需要在回調時簡單地檢查此值:

task.result?.userConfirmed?.boolValue

無論用戶是否被確認,這都將返回true或false。 希望這可以幫助。

正如我上面提到的,我沒有成功使用getDetailsgetSession來檢查用戶是否已經確認。 我正在做的是調用AWSMobileClient.sharedInstance().signIn

如果我收到錯誤: AWSMobileClientError.userNotConfirmed ,那么我將其視為指示用戶尚未確認。

如果我成功讓用戶登錄,那么我將其視為用戶已確認。

當然,這會留下用戶登錄的副作用。我最初嘗試在此之后簽署用戶作為signIn回調的一部分,但這有一個奇怪的副作用,即signIn回調被調用兩次!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM