我的令牌签名无法通过外部 API 和应用程序中的内部请求进行验证
I got Token Signature could not be verified with external API and internal requests in my app
在 Laravel 5.8 / vuejs / vuex / mysql 应用程序中,我使用 jwt-auth 并且当我登录
系统(mysql 用户 table 的标准身份验证)我使用方法:
export function setAuthorizationToken(token) {
axios.defaults.headers.common["Authorization"] = `Bearer ${token}`
}
它工作正常。
接下来我需要重新制作 SignUp/SignIn 以使用外部 API 进行 SignUp/SignIn 操作。
所以我的应用程序需要使用外部 API 制作 SignUp/SignIn ,但我也有请求控制我的应用程序 read/write 数据 from/to 我的 sql.
仅对外部 API returns 令牌的登录请求,我将其保存在上面的 setAuthorizationToken 方法中。
接下来我需要从这个外部 API 读取用户详细信息并将其保存在 vuex 存储中。我做到了,它工作正常,但问题是
我的下一个 axios 请求我的控件从数据库中读取数据触发错误:
Token Signature could not be verified.
我明白为什么,但有办法解决吗?
是否可以在需要时将 Bearer 替换为 axios?
也许对 axios 进行一些替换以同时使用 axios 和替换?
"laravel/framework": "5.8.*",
"tymon/jwt-auth": "^1.0.0",
"vue": "^2.5.17",
"axios": "^0.18",
"vuex": "^3.1.0"
谢谢!
已修改:
正在搜索有关登录的决定,我希望我在 cookie 中获得令牌 'external_token'
const headers = {
'Content-Type': 'application/json',
'X-Auth-Token': getCookie('external_token'),
'Access-Control-Allow-Origin' : '*',
"Access-Control-Allow-Methods": "GET",
};
axios.get(user_details_url, headers)
.then((response) => {
...
})
.catch((err) =>{
})
但我在控制台中遇到错误:
Access to XMLHttpRequest at 'http://remoteserver.com/api/user' from origin 'http://local-wiznext.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
其中 remoteserver.com 是带有 API 的远程服务器,http://local-wiznext.com 是我正在开发的本地服务器
在寻找决定时,我发现了几个附加参数可以添加到我的 axios 请求的 header 中:
const headers = {
'Content-Type': 'application/json',
'X-Auth-Token': getCookie('external_token'),
'Access-Control-Allow-Origin' : '*',
"Access-Control-Allow-Methods": "GET",
'crossDomain': true,
'dataType': 'jsonp',
};
// axios.get(url, {headers})
但我遇到了同样的 CORS 错误。
如果有办法修复此错误和 运行 请求?
已修改 # 2 :
我服务器的管理员使用了这个选项
https://support.cloudways.com/enable-cors-headers/
并启用 CORS headers
并重新启动 debian,但我仍然收到 CORS 错误。
有解决问题的想法吗?
我从问题中可以了解到,您有一个外部 API 和内部 API,它们使用不同的标记。因此,您可以在 SignUp/SignIn 之后在 cookie 中设置令牌,而不是在 SignUp/SignIn 之后设置令牌。对于外部令牌,您可以将其命名为 external_token
,对于内部令牌,您可以在 cookie 中将其设置为 token
。现在,无论何时触发 axios 调用,您都会提前知道 API 是外部的还是内部的,并且基于此您将仅为该 API 调用设置令牌,而不设置默认授权 header.
在 Laravel 5.8 / vuejs / vuex / mysql 应用程序中,我使用 jwt-auth 并且当我登录 系统(mysql 用户 table 的标准身份验证)我使用方法:
export function setAuthorizationToken(token) {
axios.defaults.headers.common["Authorization"] = `Bearer ${token}`
}
它工作正常。
接下来我需要重新制作 SignUp/SignIn 以使用外部 API 进行 SignUp/SignIn 操作。 所以我的应用程序需要使用外部 API 制作 SignUp/SignIn ,但我也有请求控制我的应用程序 read/write 数据 from/to 我的 sql.
仅对外部 API returns 令牌的登录请求,我将其保存在上面的 setAuthorizationToken 方法中。 接下来我需要从这个外部 API 读取用户详细信息并将其保存在 vuex 存储中。我做到了,它工作正常,但问题是 我的下一个 axios 请求我的控件从数据库中读取数据触发错误:
Token Signature could not be verified.
我明白为什么,但有办法解决吗? 是否可以在需要时将 Bearer 替换为 axios? 也许对 axios 进行一些替换以同时使用 axios 和替换?
"laravel/framework": "5.8.*",
"tymon/jwt-auth": "^1.0.0",
"vue": "^2.5.17",
"axios": "^0.18",
"vuex": "^3.1.0"
谢谢!
已修改:
正在搜索有关登录的决定,我希望我在 cookie 中获得令牌 'external_token'
const headers = {
'Content-Type': 'application/json',
'X-Auth-Token': getCookie('external_token'),
'Access-Control-Allow-Origin' : '*',
"Access-Control-Allow-Methods": "GET",
};
axios.get(user_details_url, headers)
.then((response) => {
...
})
.catch((err) =>{
})
但我在控制台中遇到错误:
Access to XMLHttpRequest at 'http://remoteserver.com/api/user' from origin 'http://local-wiznext.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
其中 remoteserver.com 是带有 API 的远程服务器,http://local-wiznext.com 是我正在开发的本地服务器
在寻找决定时,我发现了几个附加参数可以添加到我的 axios 请求的 header 中:
const headers = {
'Content-Type': 'application/json',
'X-Auth-Token': getCookie('external_token'),
'Access-Control-Allow-Origin' : '*',
"Access-Control-Allow-Methods": "GET",
'crossDomain': true,
'dataType': 'jsonp',
};
// axios.get(url, {headers})
但我遇到了同样的 CORS 错误。 如果有办法修复此错误和 运行 请求?
已修改 # 2 :
我服务器的管理员使用了这个选项 https://support.cloudways.com/enable-cors-headers/ 并启用 CORS headers 并重新启动 debian,但我仍然收到 CORS 错误。 有解决问题的想法吗?
我从问题中可以了解到,您有一个外部 API 和内部 API,它们使用不同的标记。因此,您可以在 SignUp/SignIn 之后在 cookie 中设置令牌,而不是在 SignUp/SignIn 之后设置令牌。对于外部令牌,您可以将其命名为 external_token
,对于内部令牌,您可以在 cookie 中将其设置为 token
。现在,无论何时触发 axios 调用,您都会提前知道 API 是外部的还是内部的,并且基于此您将仅为该 API 调用设置令牌,而不设置默认授权 header.