如何使应用程序(用户名/密码登录)知道用户已登录?

时间:2018-03-06 17:27:49

标签: ios swift firebase

我正在尝试创建一个登录屏幕,并通过Google与Firebase建立数据库。我尝试在数据库中创建帐户的方式只是创建一个名为“Users”的新子项,然后下一个子项将是一个用户(使用唯一的用户名唯一定义)。然后,用户有其他属性和一个名为loggedIn的属性,该属性设置为String'false',但在登录时,登录成功设置为String'true'。我如何知道登录后以及何时LoginViewController消失了哪个帐户已经完全登录到该手机(当时是模拟器),因为可以有更多用户同时将属性值'loggedIn'设置为'true'并且因为那不能回到数据库来检查。我真的很陌生,并且不知道这个方法是否可以通过在实时数据库中制作类似的东西并实际通过属性检查它。也许我必须使用某种本地数据库或类似的东西?

Swift 4,iOS开发,Xcode 9

3 个答案:

答案 0 :(得分:0)

我不确定这是否适合您。但是,我的一些应用程序使用CloudKit并且登录已经过身份验证,然后才会在用户的设备上打开应用程序的区域。我确定您是否要检查登录成功的状态,云上的身份验证可以更新为确认,然后您可以使用CloudKit仪表板访问云数据库。

它非常直观,可以与Xcode无缝协作。

答案 1 :(得分:0)

如果您只想在本地保留登录状态,可以使用UserDefaults。只需要一个名为currentUser的密钥,并将该值设置为其唯一ID。 一旦用户注销,只需清除该密钥。 您还可以使用它来确定在应用程序打开时是否启动登录屏幕。

但最好使用AWS Cognito或类似服务来处理用户管理。

您是仅构建iOS应用程序还是跨平台项目?

答案 2 :(得分:0)

我有一个名为LoginManager的类,定义为NSObject。其中包含一个名为accessToken的可选String变量,其中包含用于保存和检索访问令牌的setter和getter函数,包括用于清除在注销时使用的令牌的选项。还有一个检查密钥状态的功能。

var accessToken: String? {
    get {
            return //key from storage
        }

    set {
        if newValue == nil {
            //remove key from storage
        } else {
            //save key to storage
        }
    }
}

func isUserLogedIn() -> Bool {
    return self.accessToken != nil
}

在我自己的情况下,我有一个应用程序管理器对象,它根据此信息更改根视图控制器。

LoginManager.singleton.isUserLogedIn() ? loadMainView() : loadLoginView()

因此,除非用户已登录,否则永远不会加载生成的视图控制器。这对您有用吗?

相关问题