我使用Alamofire在IOS / Swift端执行HTTP方法,而在服务器端我使用node.js / Express进行基于令牌的身份验证。
这是场景,用户点击登录然后它将使用Alamofire来呼叫
/auth/login
url执行逻辑,然后服务器将使用令牌进行响应,然后它将用户导航到主屏幕。一切都很顺利。
我使用Keychain来存储令牌。 https://github.com/kishikawakatsumi/KeychainAccess
Alamofire.request(.POST, "https://specialapp.herokuapp.com/auth/login", parameters: parameters, encoding: .JSON)
.responseJSON { response in
if let httpError = response.result.error {
let statusCode = httpError.code
print(statusCode)
} else {
if let value = response.result.value {
let json = JSON(value)
let statusCode = (response.response?.statusCode)!
if statusCode == 401 {
print(json)
} else {
print(json["token"])
let token = json["token"]
self.keychain["token"] = String(token)
self.performSegueWithIdentifier("Main", sender: sender)
}
}
}
}
但真正的问题在于我关闭应用程序,然后再次重新打开它。我想要实现的是每当用户登录时,关闭应用程序并再次重新打开它将使用户返回主屏幕。
我将如何实现这一目标?
答案 0 :(得分:3)
在viewdidload方法中,您可以像这样检查您的令牌。如果未设置,则表示仍未完成登录。
if let token = NSUserDefaults.standardUserDefaults().valueForKey(KToken) as? NSString {
// Token stored in NSUserDefaults.
} else {
// Have to login
}
并像NSUserDefault一样存储价值。
NSUserDefaults.standardUserDefaults().setValue(email, forKey: KToken)
NSUserDefaults.standardUserDefaults().synchronize()
答案 1 :(得分:0)
更新
应用程序状态可以与特定屏幕的某些import UIKit
class MyClass<T> {
init() {
if(T.self == Void.self) {
print("Void!")
} else {
print("Not Void!")
}
}
}
// Will print Not Void
var test = MyClass<Int>()
// Will print Void
var test2 = MyClass<Void>()
一起存储。在ID
中,从-viewDidLoad()
获取前一个ID
并拥有一个局部变量。然后在NSUserDefaults
中设置当前页面ID
。反之亦然NSUserDefaults
删除当前ID存储以前的ID。
当您拥有所有-dealloc()
的超级视图控制器时,工作量太少
将您的任何令牌存储在viewcontroller
中。即使在删除应用程序后,存储在钥匙串中的数据也不会被删除。找到最好的Answer here
您还可以选择在keychain