为什么访问安全页面时不能重定向到/ login?

问题描述 投票:0回答:1

我正在重新创建问题,因为我不确定这是否是一个错误,为此而创建的先前问题刚刚消失了= /

说明

[从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()
  };
}

documentationexample中所述

预期

我希望被重定向到/login

结果

相反,我留在页面上,checkAuth被好称,jwtnull

enter image description here

可能的解决方法

提供了使用拒绝的诺言参数更改重定向的方法:

    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

问题

  • 客户端应如何处理permissionscheckAuth拒绝参数?
  • 接下来我应检查什么,以查看重定向失败的原因?

ra-core代码如何遵循?

感谢您的建议和时间

javascript reactjs authentication es6-promise react-admin
1个回答
0
投票
您能仔细检查一下这行吗?

// 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(),

让我知道它是如何工作的。
© www.soinside.com 2019 - 2024. All rights reserved.