【问题标题】:Could not decode token: The token ###无法解码令牌:令牌###
【发布时间】:2017-04-15 07:50:37
【问题描述】:

我使用 Laravel 5.3 作为我的 iOS 应用程序的 API。当我尝试使用标头和参数进行 HTTP 调用时,出现 401 错误:

message = "无法解码令牌:令牌 \ “可选(\” “eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjUsImlzcyI6Imh0dHA6XC9cL2xvY2FsaG9zdDo4MDAwXC9hcGlcL2F1dGhcL3Bvc3RMb2dpbiIsImlhdCI6MTQ4MDUzNzQxOCwiZXhwIjoxNDgwNTQxMDE4LCJuYmYiOjE0ODA1Mzc0MTgsImp0aSI6ImMyZmYxNzI5N2U5OGU4MzkzYzZkZWRmNTZlN2ZkMzNkIn0.u6sQqlq5k-B5jhZ7EymkXLlcTIQ-i7X_83an5irwTss \””是一个 无效的 JWS"; “状态码”= 401; }

这是发出 HTTP 请求的代码:

let headers = ["Authorization":"Bearer \(token)"]

    request(url! ,  method: .get, parameters: nil, encoding: JSONEncoding.default ,  headers: headers )
        .responseJSON { response in


        print("RESPONSE \(response)")

我做了一些谷歌搜索,发现了一个名为 JWTDecode.swift 的用于编码 JWT 的包。这是代码的链接:https://github.com/auth0/JWTDecode.swift。我仍然无法弄清楚如何解决这个问题。

【问题讨论】:

  • 在错误消息中,token 是 Optional 并且没有被解包,这可能是原因。
  • 我将令牌保存在这样的容器中 `var token: String? { didSet { let defaults = UserDefaults.standard defaults.set(token, forKey:DefaultsKey.token) } ` 然后在标头数组中调用它 let headers = ["Authorization" : "Bearer\(UserDataSingleton.sharedDataContainer.token)"]n 我应该在哪里解包?
  • 用户 simpleBob 的答案似乎正确。

标签: json swift laravel token jwt


【解决方案1】:

改变

let headers = ["Authorization":"Bearer \(token)"]

类似

guard let token = token else { return }
let headers = ["Authorization":"Bearer \(token)"]

否则,您将发送 Optional(<token>) 而不是 <token>

【讨论】:

  • 你的意思是这样guard let token = UserDataSingleton.sharedDataContainer.token else { return nil } let headers = ["Authorization":"Bearer \(token)"],因为令牌保存在nsuserdefaults中
  • 没错,如果你在一个没有令牌的情况下应该返回nil的函数。
  • 错误unexpected non void return value in void function
  • 更新了答案,你不应该返回nil,你应该返回
  • 你可能用一个可选项保存它,你也必须打开它(添加一个if letguard let!
猜你喜欢
  • 2017-03-21
  • 2021-06-30
  • 2019-03-23
  • 2020-12-01
  • 1970-01-01
  • 2019-09-24
  • 2021-12-30
  • 2018-10-05
  • 1970-01-01
相关资源
最近更新 更多