无法解码令牌:令牌###
Posted
技术标签:
【中文标题】无法解码令牌:令牌###【英文标题】: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 的答案似乎正确。
【参考方案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 let
、guard let
或!
)以上是关于无法解码令牌:令牌###的主要内容,如果未能解决你的问题,请参考以下文章
tymon/jwt-auth Laravel:无法验证令牌签名
尝试解码 Jwt 令牌时出现“尝试解码 Jwt 时发生错误:无法检索远程 JWK 集:”错误