将令牌发送到服务器Swift 3

时间:2017-06-07 09:23:54

标签: ios iphone json swift

我试图将令牌发送到我的服务器以检查令牌是否仍然有效或已过期。令牌值是从设备上保存的数据中提取的。但无论我尝试什么,它一直给我"缺少令牌"这是我发送空字符串时的状态消息。

    // 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; })

1 个答案:

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

与往常一样,从不使用valueForKeyUserDefaults获取单个对象,始终使用objectForKey从不使用NSDictionary对于符合属性列表的字典,请始终使用[String:Any]