使用jQuery Ajax的JWT令牌

时间:2015-12-01 22:04:55

标签: jquery ajax laravel jwt dingo-api

我有一个用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中间件上运行得很好。

希望你能提出建议..

2 个答案:

答案 0 :(得分:1)

我从子域中删除了API并且工作正常。它必须与jsonp和JWT Tokens有关。

答案 1 :(得分:1)

HTTP状态代码401用于&#34;未授权&#34;,这意味着需要验证并且已经失败或尚未正确提供。 在这种情况下,这是因为没有正确提供。您正尝试在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可以解决您的问题,但如果没有更多信息,很难说清楚。