登录后保存userDefault令牌

时间:2017-07-29 13:25:40

标签: ios iphone swift login

我是软件新手,我有一个问题。

我有一个名为LoginVC的LoginPage(截图如下)。当用户第一次打开应用程序时,如果会员使用他的用户名和密码或通过Facebook帐户登录,下次他打开应用程序时,他将通过登录屏幕,直接显示“NewsVC”。如果他退出,他将再次看到登录页面。

根据我的调查,我必须使用UserDefault方法并创建一个本地数据库(例如SQLite)。可能它会为输入的用户创建一个访问令牌。但我不知道我会怎么做。也许在这个网站上有关于这个问题的问题,但由于我不知道详细的方式找不到这个主题。

您能解释一下这个主题并与一个简单的Swift 3代码共享一个例子。

提前致谢 LoginVC ScreenShot

3 个答案:

答案 0 :(得分:4)

尝试使用Helper方法

设置用户ID

func setCurrentLoginID(_ struserid: String) {
    UserDefaults.standard.set(struserid, forKey:"userID")
}

检查用户是否登录

func isUserLoggedIN() -> Bool {
    let str = UserDefaults.standard.object(forKey: "userID") as! String
    return str.characters.count > 0 ? true : false
}

获取用户ID

func loggedUserId() -> String {
    let str = UserDefaults.standard.object(forKey: "userID") as? String
    return str == nil ? "" : str!
}

退出

func logout() {
    UserDefaults.standard.set(nil, forKey: "userID")
}

答案 1 :(得分:2)

Securitywise,在UserDefaults中存储登录令牌被认为是一种不好的做法,我建议使用Keychain API。 “黑客”可以相对轻松地从UserDefaults读取数据并使用您的访问令牌。

Keychain API有点难用,我建议尝试第三方库,这里有一个例子: https://github.com/jrendel/SwiftKeychainWrapper

有关在iOS上保护数据的更多信息: https://github.com/felixgr/secure-ios-app-dev

如果你刚刚学习 - 可以使用UserDefaults,但是一旦考虑将你的应用程序转移到生产环境 - 将其重构为Keychain。

答案 2 :(得分:0)

假设您想知道如何实现这一点,那么您可以存储并获取如下值: -

let default = UserDefaults.standard
default.set(accessToken, forKey: "accessToken")
default.synchronized()
//Now get like this and use guard so that it will prevent your crash if value is nil.
guard let accessTokenValue = default.string(forKey: "accessToken") else {return}
print(accessTokenValue)