我正在重新创建问题,因为我不确定这是否是一个错误,为此而创建的先前问题刚刚消失了= /
[从react-admin
v2升级到v3.3.0的过程中,我在重写/login
后遇到重定向到authProvider
的问题
我的authProvider.js
包含以下方法:
export default function createAuthProvider(urls, client, options) {
return {
login: (params) => {
return fetchLoginBatch(params, urls, client, options);
},
logout: (params) => params.jwt ? fetchLogout(makeRequestLogout(urls.logout, params.jwt), options) : Promise.resolve(),
checkError: (error) => {
const { status } = error;
if (status === 401 || status === 403) {
return Promise.reject();
}
return Promise.resolve();
},
checkAuth: (params) => params.jwt ? Promise.resolve() : Promise.reject(),
getPermissions: (params) => params.jwt ? Promise.resolve(params.jwt.authorities) : Promise.resolve(),
refreshJwt: (params) => params.jwt ? fetchRefreshJwt(makeRefreshJwtRequest(client.accessTokenUri, {
grant_type: 'refresh_token',
refresh_token: params.jwt.refresh_token,
}, client), options) : Promise.resolve()
};
}
如documentation和example中所述
我希望被重定向到/login
。
相反,我留在页面上,checkAuth
被好称,jwt
是null
,
提供了使用拒绝的诺言参数更改重定向的方法:
checkAuth: () => localStorage.getItem('token')
? Promise.resolve()
: Promise.reject({ redirectTo: '/no-access' }),
但是即使运行代码,添加Promise.reject({ redirectTo: '/login' })
也无济于事。
我尝试在ra-core/lib/sideEffect/auth.js
中添加一些日志记录:
console.log('auth');
exports.handleCheck = function (authProvider) {
console.log('handleCheck', authProvider);
return function (action) {
console.log('action', action);
var payload, meta, error_1, redirectTo, errorMessage;
console.log('redirectTo', redirectTo, 'meta', meta);
handleCheck
被调用,但从不action
,似乎以某种方式忽略了传奇。
我也曾尝试做(错误):
{
getPermissions: (params) => params.jwt ? Promise.resolve(params.jwt.authorities) : Promise.resolve({ redirectTo: '/login' }),
}
[效果更好,它触发了重定向到/login
,但是然后我遇到了一个问题,permissions
是对象{ redirectTo: '/login' }
,而不是我的权限[Array
导致了其余问题我的userland代码失败,
permissions
。问题
permissions
和checkAuth
拒绝参数?ra-core
代码如何遵循?
感谢您的建议和时间
// authProvider.js
// checking if request has a JWT (this might be a typo!)
- checkAuth: (params) => params.jwt ? Promise.resolve() : Promise.resolve(),
// If not, we should reject thus triggering a redirect.
+ checkAuth: (params) => params.jwt ? Promise.resolve() : Promise.reject(),
让我知道它是如何工作的。