2017-06-07 63 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! 我相信我沒有正確地從保存的對象中檢索令牌。 –