我正在尝试从 post 方法获取令牌,但我得到 json 响应 "Get/Method?Not Allowed" 我为此使用 POST 方法

Posted

技术标签:

【中文标题】我正在尝试从 post 方法获取令牌,但我得到 json 响应 "Get/Method?Not Allowed" 我为此使用 POST 方法【英文标题】:I am trying to get token from post method but I am getting json Response "Get/Method?Not Allowed" I using POST method for this 【发布时间】:2017-12-15 20:56:56 【问题描述】:

我正在尝试发布电子邮件和密码并获取令牌作为响应。

使用相同的令牌我必须从服务器获取响应。

在这种情况下请帮助我,我尝试了 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": "kishor@kishor.com", "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)
        
    

【问题讨论】:

【参考方案1】:

据我了解-您想使用参数发布请求并接收令牌并再次使用相同的参数发布相同的请求?抱歉,这没有逻辑。但如果你真的想要这样做,那么你必须发出两次请求,并且在 response.result 上,你必须保存对令牌变量的正确响应。

但是.. 无论如何,如果您想在参数(登录名和密码)正确的情况下接收令牌作为响应并且保存它,那么您可以这样做(假设来自服务器的响应也是 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
            

【讨论】:

以上是关于我正在尝试从 post 方法获取令牌,但我得到 json 响应 "Get/Method?Not Allowed" 我为此使用 POST 方法的主要内容,如果未能解决你的问题,请参考以下文章

从XMLHttpRequest获取POST数据

从 keycloak 获取访问令牌的 POST 请求失败

将标头令牌获取为未定义

jwt.io 从哪里获取 JWT 令牌的公钥?

如何从 Laravel Passport 中的刷新令牌中获取 id?

有没有人设法从谷歌登录 (Flutter) 获取 id 令牌