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