使用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标头定义格式错误,非常感谢
答案 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(),
};
}
})
})