在登录时将值存储在 userDefaults 中并在每次应用程序打开时检查用户状态是个好主意吗?

Is it good idea to store value in userDefaults on sign in and check user status every time when App open?

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

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

我宁愿建议 Keychain 而不是 UserDefaults

A keychain is an encrypted container that holds passwords for multiple applications and secure services. Apple Inc. uses keychains as password management system in Mac OS and iOS.

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

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

一般来说,在AppDelegate的didFinishLaunching方法中,你可以这样做:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    if UserDefaults.standard.value(forKey: "userId") != nil {
        /// etc.
    }
return true
}
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 属性 检查用户是否登录。 您还可以创建用户模型 class.

如果一条数据不敏感(例如,默认字体大小),将其存储在NSUserDefaults.

如果需要防止随意窥探(例如,用户密码),请将其存储在 Keychain.

如果它需要对用户安全(例如,注册码),您将需要推出自己的加密,然后将数据存储在您喜欢的任何地方。

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