0

使用 angular 并尝试使用带有 devextreme dxdatagrid 的 odata 源传递不记名令牌,但我无法对其进行身份验证和提取数据,不断返回“当前用户未登录应用程序!”,表明它没有进行身份验证.

我可以使用邮递员成功模拟呼叫。数据源定义如下:

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
            }
        }
    }
}

邮递员请求图片

我假设我的 beforesend 标头定义格式不正确,非常感谢任何帮助

xhr 截图

4

3 回答 3

1

beforeSend 函数必须在 store 对象中。

    this.dataSource = {
      store: {
        type: 'odata',
        key: 'Id',
        url: 'https://localhost:44350/odata/Books',
        version: 4,
        withCredentials: true,
        beforeSend: (e) => {
          e.headers = {
            "Authorization": `Bearer ${jwtToken}`
          };
        }
      }
于 2021-03-22T00:21:23.563 回答
0

我能够通过如下定义数据源来使其工作:

this.gridDataSource = new DataSource({ store: new ODataStore({ url: " http://localhost:21021/odata/Roles ", key: "Id", keyType: "Int32", version: 4, beforeSend: (e ) => {
e.headers = { "Content-Type": "application/json", "Authorization": 'Bearer' + abp.auth.getToken(), }; } }) })

于 2018-07-12T07:15:46.223 回答
0

尝试使用btoa编码

let authString = "Bearer " + window.btoa(getToken()+ ':');
于 2018-07-11T06:42:54.023 回答