Ajax请求标头中的承载令牌未定义。

时间:2018-11-07 14:48:27

标签: jquery ajax auth0 bearer-token request-headers

在这里,我正在调用控制器方法GetAccessTokenAsync,它返回一个包含来自auth0的访问令牌的JSON结果

function GetAccessToken() {
$.ajax({
    type: "GET",
    url: "https://localhost:44301/Account/GetAccessTokenAsync",
    contentType: 'json',
    dataType: 'json',
    success: function (data) {
        JSON.stringify(data)
    }
});}

这是控制器方法代码

 public async Task<JsonResult> GetAccessTokenAsync()
    {
        var accessToken = await HttpContext.GetTokenAsync("access_token");

        return Json(accessToken);
    }

在这里,我尝试从上面的ajax调用中将值获取到请求标头中,但它始终返回未定义状态。但是,该呼叫确实包含正确的访问令牌,只是设置不正确

function GetAll() {
var accessToken = GetAccessToken();
$.ajax({
    type: "GET",
    contentType: 'json',
    dataType: 'json',
    crossDomain: false,
    url: "https://localhost:44348/api/v1/trialuser/1",
    beforeSend: function (request) {
        request.setRequestHeader("Authorization", "Bearer " + accessToken);
        request.setRequestHeader("Access-Control-Allow-Origin", "https://localhost:44301");
    },
    success: function (data) {
        $.each(data, function (key, item) {
            $('<tr>', { html: formatItem(item) }).appendTo($("#getAllTable"));
            $('#show').attr("disabled", true)
        })
    },

});}

还有其他人遇到这个问题吗?而且我对jquery和ajax调用的了解并不广泛,因此请感谢任何示例

2 个答案:

答案 0 :(得分:1)

您是函数GetAccessToken()不会返回任何内容或设置任何全局变量。 因此,从设置accessToken = GetAccessToken()的函数GetAll()对该函数的调用没有任何设置。

要么在成功事件中返回某些内容,要么设置一个变量值,两个函数都可以访问范围。

答案 1 :(得分:0)

更改您的GetAccessToken方法以返回响应。

function GetAccessToken() {
$.ajax({
    type: "GET",
    url: "https://localhost:44301/Account/GetAccessTokenAsync",
    contentType: 'json',
    dataType: 'json',
    success: function (data) {
        return JSON.stringify(data)
    }
});}