每次App打开时,在登录时在userDefaults中存储值并检查用户状态是否是个好主意?

时间:2018-04-26 05:50:03

标签: ios nsuserdefaults

当用户登录时,我将一些值存储到userDefaults中,并在主屏幕上检查用户是否已登录。 使用userDefaults或其他任何方法来检查用户登录状态是个好主意。

5 个答案:

答案 0 :(得分:1)

是的,您可以在Userdefaults中保存访问令牌或用户ID,并检查用户是否登录。如果用户已经登录,则用于导航到主页或任何其他用户。您可以编写导航代码在你的Appdelegate。

答案 1 :(得分:0)

我宁愿建议Keychain而不是 UserDefaults

  

钥匙串是一个保存密码的加密容器   多种应用和安全服务。 Apple Inc.使用钥匙串   作为Mac OS和iOS中的密码管理系统。

话虽如此,所有敏感信息都应该转到钥匙串 根据您每次检查用户状态的观点,这是正确的方法。移动应用程序通常不会每次显示登录屏幕,除非它是像银行业务那样的关键应用程序。

答案 2 :(得分:0)

是的,UserDefaults是存储不大的信息的最佳方式。 您可以将用户首选项存储在UserDefaults中。

通常,在AppDelegate中的didFinishLaunching方法中,您可以执行以下操作:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    if UserDefaults.standard.value(forKey: "userId") != nil {
        /// etc.
    }
return true
}

答案 3 :(得分:0)

var isUserLoggedIn: Bool {
    return UserDefaults.standard.value(forKey: "userDetail") != nil
}

var currentUser : [String:Any] {
    set{
        guard let unwrappedKey = newValue else{
            return
        }
        UserDefaults.standard.set(unwrappedKey, forKey: "userDetail")
        UserDefaults.standard.synchronize()
    } get {

        guard let userDict =  UserDefaults.standard.object(forKey:"userDetail") else {
            return nil
        }
        return userDict
    }
}

func removeCurrentUser(){
    if UserDefaults.standard.value(forKey: "userDetail") != nil {
        UserDefaults.standard.removeObject(forKey: "userDetail")
        UserDefaults.standard.synchronize()
    }
}

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if isUserLoggedIn {
  //etc..
}
return true
}

现在您可以使用isUserLoggedIn属性检查用户是否登录。 您还可以创建用户模型类。

答案 4 :(得分:0)

如果某件数据不敏感(例如,默认字体大小),请将其存储在 NSUserDefaults 中。

如果需要保护其免受随意监听(例如,用户密码),请将其存储在钥匙串中。

如果需要保护用户安全(例如注册码),则需要自行推送加密,然后将数据存储在任意位置。

在普通的iPhone和iPad中,可以安全地存储在UserDeafaults中,但在越狱设备中,可以轻松获取这些数据。这就是为什么首选将敏感数据存储到Keychain中。