2017-12-15 7 views
-1

私は電子メールとpassowrdをポストし、私はポストメソッドからトークンを取得しようとしていますが、私は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でリクエストを送信してトークンを受信し、同じパラメータで同じリクエストを再度送信したいとしますか?申し訳ありませんが、その中に論理はありません。しかし、あなたが何をしたいのかというと、2回要求しなければならない場合と、それに応答して、あなたのトークン変数に適切な応答を保存する必要があります。

Buut ..とにかくparams(ログインとパスワード)が正しい場合、それを保存するよりも、トークンを受け取る場合は、このようにすることができます(サーバーからの応答もJSON)。

ログイン要求:

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

とトークン必要がある他の要求だけでは例のようにヘッダーにトークンを追加するためより:

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 
      } 
関連する問題