我使用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'。实际上,我想向管理员添加权限。我希望只有管理员才能看到一些资源。我知道它是怎么做的,但我不知道在授权期间如何向用户添加角色。
试试这个:
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');
};
};