授权权限

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

我使用ra-loopback。我想在授权期间添加一个角色。我试图添加这样的角色:

./authClient.js
import storage from './storage';
import {decode} from 'jsonwebtoken';

export const authClient = (loginApiUrl, noAccessPage = '/login') => {

    return (type, params) => {
        if (type === 'AUTH_LOGIN') {
            const request = new Request(loginApiUrl, {
                method: 'POST',
                body: JSON.stringify(params),
                headers: new Headers({ 'Content-Type': 'application/json' }),
            });
            return fetch(request)
                .then(response => {
                    if (response.status < 200 || response.status >= 300) {
                        throw new Error(response.statusText);
                    }
                    return response.json();
                })
                .then(({token}) => {
                    const decoded = decode(token);
                    storage.save('lbtoken',token);
                    storage.save('role', decoded.role);
                });
        }
        if (type === 'AUTH_LOGOUT') {
            storage.remove('lbtoken');
            return Promise.resolve();
        }
        if (type === 'AUTH_ERROR') {
            const status  = params.message.status;
            if (status === 401 || status === 403) {
                storage.remove('lbtoken');
                return Promise.reject();
            }
            return Promise.resolve();
        }
        if (type === 'AUTH_CHECK') {
            const token = storage.load('lbtoken');
            if (token && token.id) {
                return Promise.resolve();
            } else {
                storage.remove('lbtoken');
                return Promise.reject({ redirectTo: noAccessPage });
            }
        }
        if (type === 'AUTH_GET_PERMISSIONS') {
            const role = localStorage.getItem('role');
            return role ? Promise.resolve(role) : Promise.reject();
        }
        return Promise.reject('Unknown method');
    };
};

当我尝试登录时,我收到错误“无法读取属性”角色'null'。实际上,我想向管理员添加权限。我希望只有管理员才能看到一些资源。我知道它是怎么做的,但我不知道在授权期间如何向用户添加角色。

loopback react-admin
1个回答
0
投票

试试这个:

import storage from './storage';
import {
  decode
} from 'jsonwebtoken';

export const authClient = (loginApiUrl, noAccessPage = '/login') => {

  return (type, params) => {
    if (type === 'AUTH_LOGIN') {
      const request = new Request(loginApiUrl, {
        method: 'POST',
        body: JSON.stringify(params),
        headers: new Headers({
          'Content-Type': 'application/json'
        }),
      });
      return fetch(request)
        .then(response => {
          if (response.status < 200 || response.status >= 300) {
            throw new Error(response.statusText);
          }
          return response.json();
        })
        .then(({
          token
        }) => {
          const decoded = decode(token);
          storage.save('lbtoken', token);
          storage.save('role', decoded.role);
        });
    }
    if (type === 'AUTH_LOGOUT') {
      storage.remove('lbtoken');
      storage.remove('role');
      return Promise.resolve();
    }
    if (type === 'AUTH_ERROR') {
      const status = params.message.status;
      if (status === 401 || status === 403) {
        storage.remove('lbtoken');
        storage.remove('role');
        return Promise.reject();
      }
      return Promise.resolve();
    }
    if (type === 'AUTH_CHECK') {
      const token = storage.load('lbtoken');
      if (token && token.id) {
        return Promise.resolve();
      } else {
        storage.remove('lbtoken');
        storage.remove('role');
        return Promise.reject({
          redirectTo: noAccessPage
        });
      }
    }
    if (type === 'AUTH_GET_PERMISSIONS') {
      const role = localStorage.getItem('role');

      if (role) {
        return Promise.resolve(role);
      } else {
        storage.remove('lbtoken');
        storage.remove('role');
        return Promise.reject({
          redirectTo: noAccessPage
        });
      }
    }
    return Promise.reject('Unknown method');
  };
}; 
© www.soinside.com 2019 - 2024. All rights reserved.