Как применить токен носителя к источнику odata для сетки Devextreme dxdata

используя angular, и я пытаюсь передать токен носителя, используя источник odata с devextreme dxdatagrid, и я не могу заставить его аутентифицировать и извлекать данные, продолжает возвращать «Текущий пользователь не вошел в приложение!», указывая на то, что он не аутентифицируется .

Я могу успешно эмулировать вызов с помощью почтальона. Определение источника данных ниже:

constructor(
    injector: Injector,
    private _route: ActivatedRoute,
    private _router: Router
) {
    super(injector);
    let authString = "Bearer " + getToken();

    this.gridDataSource = {
        store: {
            type: 'odata',
            key: 'Id',
            keyType: "Int32",
            version: 4,
            url: 'http://localhost:21021/odata/Roles'
        },
        select: [
            'Id',
            'Name',
            'DisplayName'
        ],
        beforeSend: (e) => {  
            e.headers = {
                "Content-Type": "application/json",
                "Authorization": authString
            }
        }
    }
}

Изображение запроса почтальона

Я предполагаю, что у меня неправильно отформатировано определение заголовка перед отправкой, любая помощь очень ценится

скриншот xhr


person DLedge    schedule 11.07.2018    source источник
comment
Можете ли вы поделиться скриншотом запроса xhr вашего браузера для этого почтового запроса?   -  person Debojyoti    schedule 11.07.2018
comment
Добавлен скриншот xhr   -  person DLedge    schedule 11.07.2018


Ответы (3)


Функция beforeSend должна находиться внутри объекта хранилища.

    this.dataSource = {
      store: {
        type: 'odata',
        key: 'Id',
        url: 'https://localhost:44350/odata/Books',
        version: 4,
        withCredentials: true,
        beforeSend: (e) => {
          e.headers = {
            "Authorization": `Bearer ${jwtToken}`
          };
        }
      }
person Marcos Kuester    schedule 22.03.2021

Попробуйте кодировать с помощью btoa.

let authString = "Bearer " + window.btoa(getToken()+ ':');
person Debojyoti    schedule 11.07.2018
comment
использование window.btoa, похоже, не помогло, есть другие идеи? - person DLedge; 11.07.2018

Мне удалось заставить его работать, определив источник данных следующим образом:

this.gridDataSource = new DataSource({ store: new ODataStore({ url: "http://localhost:21021/odata/Roles", ключ: "Id", keyType: "Int32", версия: 4, beforeSend: (e) => {
e.headers = { "Content-Type": "application/json ", "Авторизация": "Носитель" + abp.auth.getToken(), }; } }) })

person DLedge    schedule 12.07.2018