2017-08-15 23 views
0

所以我正在制作一个登录应用程序来发送用户名和密码,服务器使用访问令牌回复....我试图保存这个令牌供以后使用,但我真的不能。这里是我的代码,以及柜面你的服务器响应需要 进口的UIKit如何从使用swift的响应中使用访问令牌3

class ViewController: UIViewController { 

    @IBOutlet weak var PhoneNumber: UITextField! 

    @IBOutlet weak var Password: UITextField! 
    //***************************************LogIn**********************************************\\ 
    @IBAction func Login(_ sender: UIButton) { 

     guard let url = URL(string: "https://goollyapp.azurewebsites.net/Token") else {return} 
     var request = URLRequest(url: url) 
     request.httpMethod = "POST" 
     let postString = "username=" + PhoneNumber.text! + "&password="+Password.text!+"&grant_type=password" 
     print(postString) 
     request.httpBody = postString.data(using: .utf8) 
     let task = URLSession.shared.dataTask(with: request) { data, response, error in 
      if let response = response { 
       print(response) 
      } 
     } 
     task.resume() 
    } 
} 
+0

什么是你的后台?你是否试过简单地将它返回到响应体而不是头部? – murphguy

+2

我不会公开一个令牌,并且它确实看起来像一个令牌......它应该在您的响应对象中,我不知道您的后端,但正如@murphguy所述,最好返回一个JSON对象持有令牌数据而不是将其返回到头部 –

+0

您可以将json令牌转换为字典,然后可以使用键值对使用它,稍后可以将它创建为多个VC的单例。 –

回答

1

如果你声明json变量替换:

let json = try? JSONSerialization.jsonObject(with: data, options: []) as! [String: Any] 

然后,您可以访问令牌:

let token = json["access_token"] as! String 

(收到成功的JSON响应后)

然后,您可以实现一个Singleton如下:

class Token { 

    // Can't init a singleton 
    private init() { } 

    static let sharedInstance = Token() 

    var tokenString = "" 

} 
+0

使用时出现错误:let token = json [“access_token”] as!字符串 –

+0

错误是:输入“Any?”没有下标成员 –

+1

替换'let json = try? JSONSerialization.jsonObject(带有:data,options:[])',用'let json = try? JSONSerialization.jsonObject(带有:data,options:[])as! [字符串:任何]'。 –

0

如果你想保存令牌的变量以后使用它,(在你的响应对象键为相应的键名)试试这个

let token = httpResponse?.allHeaderFields["SECURITY-TOKEN"] as? String

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
      let httpResponse = response as? HTTPURLResponse 
      let token = httpResponse?.allHeaderFields["SECURITY-TOKEN"] as? String 
       print(token) 
} 
task.resume() 
+0

嗯...似乎并没有工作....当我打印它,我得到无 –

+0

反正这种方式实际上工作....:让任务= URLSession.shared.dataTask(与:请求){数据,响应,错误 让json =试试? JSONSerialization.jsonObject(带有:data !,选项:[])as! [String:Any] let token = json?[“access_token”] as!字符串 打印(标记) } task.resume() //现在面临的唯一问题是,我想使用此令牌从另一个类@Naishta –

+0

如何创建类的一个对象,并访问该令牌属性?或其他方法正在将此属性注入到您需要的任何地方 – Naishta

相关问题