我试图将令牌发送到我的服务器以检查令牌是否仍然有效或已过期。令牌值是从设备上保存的数据中提取的。但无论我尝试什么,它一直给我"缺少令牌"这是我发送空字符串时的状态消息。
// load content in user var
user = UserDefaults.standard.value(forKey: "parseJSON") as? NSDictionary
// if user is once logged in / register, keep him logged in
if user != nil {
print(user as Any)
let userToken = user!["token"] as? String
let url = NSURL(string: "http://fmm.dummy.com/api/v1/auth/me")!
var request = URLRequest(url: url as URL)
request.setValue("Bearer \(String(describing: userToken))", forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"
当我编辑并执行此操作时,错误消息将更改为"无效令牌"这意味着我正在送东西。它只是不正确
// load content in user var
user = UserDefaults.standard.value(forKey: "parseJSON") as? NSDictionary
// if user is once logged in / register, keep him logged in
if user != nil {
print(user as Any)
let userToken = user!["token"] as? String
let a: Character = "<"
let b: Character = ">"
let url = NSURL(string: "http://fmm.dummy.com/api/v1/auth/me")!
var request = URLRequest(url: url as URL)
request.setValue("Bearer .append\(a)\(String(describing: userToken)).append\(b)", forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"
//launch session
URLSession.shared.dataTask(with: request) { data, response, error in
有人可以帮我弄清楚你做错了什么?
感谢
/// EDIT 嗨,当我按照你的建议进行编辑并提出这个时,我甚至无法打印到控制台。以下是供您考虑的完整代码。谢谢你的回复。 如果让user = UserDefaults.standard.object(forKey:&#34; parseJSON&#34;)为? [字符串:任何] 让userToken = user [&#34; token&#34;]为?字符串{
let url = URL(string: "http://fmm.dummy.com/api/v1/auth/me")!
var request = URLRequest(url: url)
let tokenString = "Bearer " + userToken
request.setValue(tokenString, forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"
//launch session
URLSession.shared.dataTask(with: request) { data, response, error in
//check if no error
if error == nil{
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
guard let parseJSON = json else{
print ("Error While Parsing")
return
}
print(parseJSON)
let statusMsg = parseJSON["status"] as? String
if statusMsg == "OK"{
//token still valid
self.login()
}else {
//token is invalid
// get main queue to communicate back to user
DispatchQueue.main.async(execute: {
let message = parseJSON["status_msg"] as! String
appDelegate.infoView(message: message, color: colorSmoothRed)
})
}
}catch{
// get main queue to communicate back to user
DispatchQueue.main.async(execute: {
let message = "\(error)"
appDelegate.infoView(message: message, color: colorSmoothRed)
})
return
}
}else{
// get main queue to communicate back to user
DispatchQueue.main.async(execute: {
let message = error!.localizedDescription
appDelegate.infoView(message: message, color: colorSmoothRed)
})
return
}
}.resume()
}
我试图在appdelegate.swift中编写代码,检查从先前登录中保存的令牌是否仍然有效或已过期!用户设备上保存的对象如下。当我将用户打印到控制台时,我得到了这个。 :: -
可选({ response = { 令牌=&#34; eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjIsImlzcyI6Imh0dHA6XC9cL3htbS54bW9iaWxlbW9uZXkuY29tXC9hcGlcL3YxXC9hdXRoIiwiaWF0IjoxNDk2ODUyNTkxLCJleHAiOjE0OTY4NTYxOTEsIm5iZiI6MTQ5Njg1MjU5MSwianRpIjoiOTFhYjE0MjZkMGZmN2RjZDVjOTQzNTlkZGY4OGY0ZmYifQ.WaQFprfRbJMDQ72IORtWrcSmUqY3EaJp5BAqjijvUAc&#34 ;; 已验证= 1; }; status = OK; })
答案 0 :(得分:1)
您使用的选项太多,在调用"Optional(<value>)"
方法时会导致意外的文字description
。
使用可选绑定安全地打开所有选项:
if let user = UserDefaults.standard.object(forKey: "parseJSON") as? [String:Any],
let userToken = user["token"] as? String {
let url = URL(string: "http://fmm.dummy.com/api/v1/auth/me")!
var request = URLRequest(url: url)
let tokenString = "Bearer " + userToken
request.setValue(tokenString, forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"
...
与往常一样,从不使用valueForKey
从UserDefaults
获取单个对象,始终使用objectForKey
,从不使用NSDictionary
对于符合属性列表的字典,请始终使用[String:Any]
。