我是软件新手,我有一个问题。
我有一个名为LoginVC的LoginPage(截图如下)。当用户第一次打开应用程序时,如果会员使用他的用户名和密码或通过Facebook帐户登录,下次他打开应用程序时,他将通过登录屏幕,直接显示“NewsVC”。如果他退出,他将再次看到登录页面。
根据我的调查,我必须使用UserDefault方法并创建一个本地数据库(例如SQLite)。可能它会为输入的用户创建一个访问令牌。但我不知道我会怎么做。也许在这个网站上有关于这个问题的问题,但由于我不知道详细的方式找不到这个主题。
您能解释一下这个主题并与一个简单的Swift 3代码共享一个例子。
提前致谢 LoginVC ScreenShot
答案 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)