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

问题描述 投票:-1回答:5

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

ios nsuserdefaults
5个回答
0
投票

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

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

如果它需要对用户安全(例如,注册代码),则需要滚动自己的加密,然后将数据存储在任何您喜欢的位置。

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


1
投票

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


0
投票

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

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

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

0
投票

我宁愿建议使用Keychain而不是UserDefaults。

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

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


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属性检查用户是否登录。您还可以创建用户模型类。

© www.soinside.com 2019 - 2024. All rights reserved.