如何将承载令牌应用于Devextreme dxdata网格的odata源

时间:2018-07-11 06:20:28

标签: angular typescript devextreme devextreme-angular

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

Postman request image

我假设我的beforesend标头定义格式错误,非常感谢

xhr screenshot

3 个答案:

答案 0 :(得分: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}`
          };
        }
      }

答案 1 :(得分:0)

尝试使用 btoa

进行编码
let authString = "Bearer " + window.btoa(getToken()+ ':');

答案 2 :(得分:0)

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

this.gridDataSource =新的DataSource({             商店:新的ODataStore({                 网址:“ http://localhost:21021/odata/Roles”,                 键:“ Id”,                 keyType:“ Int32”,                 版本:4                 beforeSend:(e)=> {
                    e.headers = {                         “ Content-Type”:“ application / json”,                         “授权”:'Bearer'+ abp.auth.getToken(),                     };                 }             })          })