检查用户是否登录

时间:2020-07-31 03:08:58

标签: ios swift aws-amplify

我是iOS开发和AWS Amplify框架的新手。我目前正在通过身份验证文档进行工作,但是目前尚不清楚如何检查给定用户的登录状态。我只想在用户尚未登录时显示登录表单。如何实现此目的?在文档中似乎没有列出任何信息,而且我从Google找到的唯一资源已应用于其他平台(反应)。

1 个答案:

答案 0 :(得分:1)

您需要监听Auth事件并更新标志Eg:isSignedIn的状态,该标志最初将被注销。

final class UserData: ObservableObject {
    @Published var isSignedIn : Bool = false
}
import UIKit
import Amplify
import AmplifyPlugins

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    public let userData = UserData()

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        do {
            try Amplify.add(plugin: AWSCognitoAuthPlugin())
            try Amplify.configure()
            
            // load data when user is signedin
            self.checkUserSignedIn()

            // listen to auth events
            _ = Amplify.Hub.listen(to: .auth) { (payload) in

                switch payload.eventName {

                case HubPayload.EventName.Auth.signedIn:
                    self.updateUI(forSignInStatus: true)

                case HubPayload.EventName.Auth.signedOut:
                    self.updateUI(forSignInStatus: false)
                    
                case HubPayload.EventName.Auth.sessionExpired:
                    self.updateUI(forSignInStatus: false)

                default:
                    break
                }
            }

        } catch {
            print("Failed to configure Amplify \(error)")
        }

        return true
    }
    func updateUI(forSignInStatus : Bool) {
        DispatchQueue.main.async() {
            self.userData.isSignedIn = forSignInStatus
        }
    }
    
    // when user is signed in, fetch its details
    func checkUserSignedIn() {

        // every time auth status changes, let's check if user is signedIn or not
        // updating userData will automatically update the UI
        _ = Amplify.Auth.fetchAuthSession { (result) in

            do {
                let session = try result.get()
                self.updateUI(forSignInStatus: session.isSignedIn)
            } catch {
                print("Fetch auth session failed with error - \(error)")
            }

        }
    }

查看完整的代码here

相关问题