我有一个用Laravel,Dingo和JWT Tokens驱动的API。使用PAW测试API调用非常有效。使用jQuery运行API调用而没有中间件JWT令牌禁用工作正常。但是一旦我尝试使用JWT Tokens运行Ajax请求,我就会获得401。
我错过了Ajax请求的技巧。你能看到这段代码有问题吗?
$.ajax({
url: "http://api.domain.app/products",
dataType : 'jsonp',
type: 'GET',
beforeSend : function(xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Authorization", "Bearer XXXX");
},
error : function() {
// error handler
},
success: function(data) {
console.log(data);
return data;
}
});
由于Cross Domain,我不得不使用jsonp。但是,这一点在JWT中间件上运行得很好。
希望你能提出建议..
答案 0 :(得分:1)
我从子域中删除了API并且工作正常。它必须与jsonp和JWT Tokens有关。
答案 1 :(得分:1)
HTTP状态代码401用于"未授权",这意味着需要验证并且已经失败或尚未正确提供。
在这种情况下,这是因为没有正确提供。您正尝试在beforeSend
参数中提供它。 beforeSend
为您提供了在发送之前操纵XMLHttpRequest
的机会,但问题是,您正在使用JSONP。而JSONP因为JSONP只是一个<script>
标签插入技巧,它不使用XMLHttpRequest
,所以操纵它是没有意义的。
Here是对JSONP究竟是什么的一个很好的解释。
您的问题是,&#34;您是否看到此代码存在问题?&#34;,我已在上面回答过。 你可能想问的是,&#34;我如何获得使用jQuery的授权问题?&#34;。 你说&#34;由于Cross Domain&#34;我不得不使用jsonp,如果你再详细说明&#34;由于Cross Domain&#34;,导致解决方案的答案将是更容易生产。 The answer in this issue可以解决您的问题,但如果没有更多信息,很难说清楚。