2017-12-15 11 views
-1

전자 메일 및 비밀번호를 POST하려고하고 응답으로 토큰을 가져 오려고합니다.post 메서드에서 토큰을 얻으려고하지만 json 응답을 얻으려고합니다. "Get/Method? Not Allowed"이 POST 메서드를 사용하고 있습니다.

동일한 토큰을 사용하여 서버로부터 응답을 얻어야합니다.

이 경우 NSURL 방법을 시도하고 almofire 시도했지만 도와주세요. 같은 결과를 얻지 못했습니다.

//Check Below code and give me proper output. 

func NewsAPI(){ 

    let url = "https://mastleadership.com/api/token-auth" 
    //Get token logic 
    let token = "" 
    let headers = ["Authorization": "token \(token)"] 
    let params = ["email": "[email protected]", "password":"abcd"] //This goes in the body of the request 
    Alamofire.request(url, method: .post, parameters: params, encoding: URLEncoding.default, headers: headers).responseJSON { (response) in 
     if let value = response.result.value { 
      print(value) 
     } 
    } 
} 

답변

0

나는 params를 사용하여 요청을 게시하고 토큰을 받고 같은 매개 변수를 사용하여 같은 요청을 게시하려고한다고 생각 했는가? 미안하지만 거기에 논리가 없다.하지만 정말로 당신이하고 싶은 것이 있다면, 두 번이나 요청을해야하고 응답 할 때, 토큰 변수에 적절한 응답을 저장해야한다.

Buut .. 어쨌든 params (로그인 및 비밀번호)가 정확하고 저장하는 것보다 토큰을 받기를 원하는 경우 다음과 같이 할 수 있습니다 (서버의 응답이 JSON이기도 한 것으로 가정).

로그인 요청 :

let token = UserDefaults.standard.value(forKey: preferencesKeys.loginToken) 
    let headers: HTTPHeaders = ["Authorization": "token \(token!)"] 
RestService.shared.almgr.request(urlStr, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in 
      switch response.result { 
      case .success: 
       //response received 
      case .failure(let error): 
       //problems 
      } 
:
func loginRestt(login:String, password:String){ 
    let urlStr = "https://mastleadership.com/api/token-auth" 
    let params = ["login":login, "password":password] 
    let headers: HTTPHeaders = ["Content-Type": "application/json"] 

    Alamofire.request(urlStr, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in 
     switch response.result { 
     case .success: 
      print("\(self.TAG), receiving response from login with \(response)") 
      guard let receivedResponse = try! JSONSerialization.jsonObject(with: response.data!, options: []) as? [String:Any] else { 
       print("\(self.TAG), Error parsing response from login for json") 
       return 
      } 
      //Here I get token and save it to preferences 
      if let token:String = receivedResponse["token"] as? String { 
       print("\(self.TAG), \(token)") 
       UserDefaults.standard.set(token, forKey: preferencesKeys.loginToken) 
      } else { 
       print("\(self.TAG), error receiving token") 
       return 
      } 

     case .failure(let error): 
      print("\(self.TAG), error receiving response for login with \(error)") 
      return 
     } 
    } 
} 

그리고 토큰 그냥 예에서와 같이 헤더에 토큰을 추가 할 필요가 다른 요청보다