2017-06-07 60 views
0

我试图发送令牌到我的服务器来检查令牌是否仍然有效或已过期。令牌值将从设备上保存的数据中提取。但无论我尝试什么,它总是给我“丢失的标记”,这是我发送空字符串时的状态消息。将令牌发送到服务器Swift 3

// 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 

有人可以请帮我找出什么是做错了? 谢谢

///编辑 嗨,当我编辑,因为你有建议,想出了这个,我甚至无法打印到控制台。以下是您考虑的完整代码。感谢您的回应。 if let user = UserDefaults.standard.object(forKey:“parseJSON”)as? [String:Any], let userToken = user [“token”] as?字符串{

 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来检查,如果从以前的登录保存令牌依然有效,或者已经过期编写代码!用户设备上保存的对象如下。当我将用户打印到控制台时,我得到了这个。 :: -

可选({ 响应= { 令牌= “eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjIsImlzcyI6Imh0dHA6XC9cL3htbS54bW9iaWxlbW9uZXkuY29tXC9hcGlcL3YxXC9hdXRoIiwiaWF0IjoxNDk2ODUyNTkxLCJleHAiOjE0OTY4NTYxOTEsIm5iZiI6MTQ5Njg1MjU5MSwianRpIjoiOTFhYjE0MjZkMGZmN2RjZDVjOTQzNTlkZGY4OGY0ZmYifQ.WaQFprfRbJMDQ72IORtWrcSmUqY3EaJp5BAqjijvUAc”; 验证= 1; }; 状态= OK; })

回答

0

您使用过当调用description方法时,许多选项可能会导致意外的文字"Optional(<value>)"

展开所有自选安全与可选的绑定:

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" 
    ... 

与往常一样,从未使用valueForKeyUserDefaults得到一个对象时,总是使用objectForKey,和一个属性列表兼容从未使用NSDictionary字典,始终使用[String:Any]

+0

感谢您的及时答复,请检查我的编辑。 非常感谢你 –

+0

什么是继续性问题?并请。我写*从不使用NSDictionary的属性列表兼容的字典*。 JSON对象属性列表符合 – vadian

+0

上面的代码完全没有做什么,甚至没有显示错误。对不起,如果我很天真,完全没用,但我是一个3周大的swifty! 我相信我没有正确地从保存的对象中检索令牌。 –