我将Django JWT与DRF一起使用,将Vue Js与Axios一起使用。当用户登录时,我检索并将令牌存储在本地存储器中,我已验证该令牌可以正常工作。然后我重定向到一个新页面,在那里我提出另一个请求以获取数据。每次我重定向到这个页面,我得到一个401未授权,当我刷新页面,它工作良好。在发出第二个请求之前,我检查了是否存储了令牌。我尝试在创建的钩子中获取重定向页面上的数据。我还创建了一个axios实例来处理头并使用一个基本路由,然后在需要的地方将它导入到文件中,我不确定这是否与此有关。这也只有当令牌过期并且您尝试检索新的时才会发生。我是否应该刷新令牌而不是尝试获取新的令牌?
import axios from 'axios'
export default axios.create({
baseURL: `http://127.0.0.1:8000/`,
headers: {
'Content-Type': 'application/json',
Authorization: 'JWT ' + localStorage.getItem('token')
},
xsrfCookieName: 'csrftoken',
xsrfHeaderName: 'X-CSRFToken',
withCredentials: true
})
import axios from 'axios'
export default axios.create({
baseURL: `http://127.0.0.1:8000/`,
headers: {
'Content-Type': 'application/json',
Authorization: 'JWT ' + localStorage.getItem('token')
},
xsrfCookieName: 'csrftoken',
xsrfHeaderName: 'X-CSRFToken',
withCredentials: true
})
confirm: function() {
API.post("accounts/login/", {
email: this.email,
password: this.password,
})
.then(result => {
console.log(result.data.token);
this.token = result.data.token;
localStorage.setItem("token", this.token);
this.getUserInfo()
})
.catch(error => {
console.log(error);
});
},
getUserInfo: function(){
axios.get("http://127.0.0.1:8000/userinfo/get/", {
headers: {
'Content-Type': 'application/json',
Authorization: 'JWT ' + this.token
}
})
.then(response => {
console.log(response.data.pos);
var pos = response.data.pos;
this.reroute(pos);
})
.catch(error => {
console.log(error);
});
},
reroute(pos) {
if (pos == "owner") {
this.$router.push({ path: "/bizhome" });
} else {
this.$router.push({ path: "/" });
}
}
created: function() {
this.getLocations();
},
methods: {
getLocations() {
API.get("business/")
.then(response => {
this.biz = response.data;
})
.catch(error => {
console.log(error);
});
API.get("locations/")
.then(response => {
this.bizLocations = response.data;
})
.catch(error => {
console.log(error);
});
},
}
使用下面YuuwakU提供的一些建议,我将头直接添加到getLocations方法中的get调用中,以覆盖axios实例头。新页面似乎是在实例中更新令牌之前加载的。但是,这个解决方案的一个缺点是,我现在必须直接将头添加到我所做的所有调用中。实例中的头永远不更新。在成功检索到本应更新实例的令牌的令牌时,我确实向confirm方法添加了api.defaults.headers.common['authorization']='jwt'+result.data.token;
。这对我不起作用,如果有人有什么想法,我会很有兴趣听听
我确实弄清楚了为什么axios实例没有更新它,是因为我试图从api.js中的本地stroage获取令牌,并且它正在重写它。现在它工作了,但是令牌不是持久的,所以这也不是理想的。我会更新,如果我找到更好的解决方案。
我终于想出了一个好办法。我从api.js中的axios实例中删除了授权头,然后从所有axios调用中删除了所有头。在成功登录时的confirm方法中,我添加了前面提到的这一行api.defaults.headers.common['authorization']='jwt'+result.data.token;
,并将令牌添加到本地存储中。我有一个在加载页面之前运行验证令牌方法。在该方法中,在发出验证令牌的post请求之前,我添加了api.defaults.headers.common['authorization']='jwt'+localstorage.getitem('token');
。这使得用户可以在站点中浏览一遍,然后返回时仍然使用令牌(如果有效的话),并且不需要在每次调用时设置头。
之所以会发生这种情况,是因为已经创建了一个axios实例,该实例带有一个存在于LocalStorage中的过期令牌。因此,您必须确保在登录后使用令牌的新get更新axios实例,否则将使用旧令牌直到重新加载新的页面。请尝试以下操作:
import axios from 'axios'
export default axios.create({
baseURL: `http://127.0.0.1:8000/`,
headers: {
'Content-Type': 'application/json',
Authorization() { // Converted to a method, similar concept to a vue data property
return `JWT ${localStorage.getItem('token')}`,
}
},
xsrfCookieName: 'csrftoken',
xsrfHeaderName: 'X-CSRFToken',
withCredentials: true
})
或者,您甚至可以使用axios拦截器从localStorage中提取每个请求:
// Add a request interceptor
axios.interceptors.request.use(config => {
// Do something before request is sent
config.headers = {
'Content-Type': 'application/json',
Authorization: 'JWT ' + localStorage.getItem('token')
}
return config
}, function (error) {
// Do something with request error
return Promise.reject(error);
});
在过去的几天里,我一直在玩弄twitter应用编程接口,但似乎无法请求“请求令牌”。(流程A) 在twitterapi上,我应该达到以下终点(https://api.twitter.com/oauth/request_token)如果请求成功,则应向我提供一个,和)(应与我通过的匹配)。我试图只使用我的私钥,但这当然是失败的。我对如何生成此请求的理解是否错误? 我相信我的问题是如何生成。阅读twi
嗨,我正在使用本教程 对于我的twitter测试项目,我已经更改了: 从 =new DefaultOAuthProvider("http://twitter.com/oauth/request_token","http://twitter.com/oauth/access_token","http://twitter.com/oauth/authorize"); 到 =new DefaultOAu
我正在学习Spring Boot 2.0和React的全栈开发。身份验证和授权由JWT管理,除了我必须在刷新浏览器后重新登录之外,应用程序按预期工作。如何在浏览器刷新后维护JWT令牌?
问题内容: 节点和角度。我有一个MEAN堆栈身份验证应用程序,在其中按如下所述在成功登录时设置JWT令牌,并将其存储在控制器的会话中。通过服务拦截器将JWT令牌分配给config.headers: authservice.js Interceptor(省略了requestError,response和responseError): 现在我想从令牌中获取登录的用户详细信息,我该怎么做?我尝试如下,但
节点和角度。我有一个平均堆栈身份验证应用程序,其中我在成功登录时设置JWT令牌,如下所示,并将其存储在控制器中的会话中。将JWT令牌分配给config。通过服务拦截器的标头: authservice.js拦截器(省略了请求错误、响应和响应错误): 现在我想从令牌中获取登录用户的详细信息,我该怎么做?我尝试了如下,但没有成功。当我记录来自用户的错误时。js文件它说“ReferenceError:未定
我想获取JWT Access令牌用于Docuse,我尝试使用以下代码获取访问令牌,之后我通过访问令牌创建信封,我得到一个错误 “调用创建信封时出错: { ”错误代码“: ”AUTHORIZATION_INVALID_TOKEN“,”消息“:”提供的访问令牌已过期、已吊销或格式不正确。 我从这个链接DocuSign JWT访问令牌请求以上代码,在用户提到的工作代码,请告诉我我犯了什么错误,注意:我正