我得到令牌签名无法通过我的应用程序中的外部 API 和内部请求进行验证



在Laravel 5.8/vuejs/vuex/mysql app中,我使用jwt-auth,当我登录时 系统(带有mysql用户表的标准身份验证(我使用的方法:

export function setAuthorizationToken(token) {
axios.defaults.headers.common["Authorization"] = `Bearer ${token}`
}

而且效果很好。

接下来,我需要重新制作注册/登录以使用外部 API 进行注册/登录操作。 所以我的应用程序需要使用外部 API 进行注册/登录,但我也有请求控制我的应用程序以从我的 sql 读取/写入数据。

对外部 API 的登录请求仅返回令牌,我将其保存在上面的 setAuthorizationToken 方法中。 接下来,我需要从这个外部 API 读取用户详细信息并将其保存在 vuex 存储中。我做到了,它工作正常,但问题是 我的下一个 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 请求的标头中:

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 标头 并重新启动 debian,但我仍然收到 CORS 错误。 任何想法如何解决问题?

我从这个问题中可以理解的是,您有一个使用不同令牌的外部 API 和内部 API。因此,您可以在注册/登录后在 Cookie 中设置令牌,而不是在注册/登录后设置令牌。对于外部令牌,您可以将其命名为external_token,对于内部令牌,您可以在cookie中设置为token。现在,每当触发 axios 调用时,您都会提前知道 API 是外部的还是内部的,并在此基础上仅为该 API 调用设置令牌,而不设置默认的授权标头。

最新更新