Мой authProvider выглядит следующим образом:
import { AUTH_LOGIN, AUTH_LOGOUT, AUTH_GET_PERMISSIONS, AUTH_CHECK } from 'react-admin';
import { stringify } from 'query-string';
export default (type, params) => {
if (type === AUTH_LOGIN) {
const { username, password } = params;
const myBody = {
username: username,
password: password,
};
const request = new Request('http://myApi.loginUrl', {
method: 'POST',
body: JSON.stringify(myBody),
headers: new Headers({ 'Content-Type': 'application/json',
'Accept': 'application/json'}),
})
return fetch(request)
.then(response => {
if (response.status < 200 || response.status >= 300) {
throw new Error(response.statusText);
}
return response.json();
})
.then(json => { localStorage.setItem('userdata', JSON.stringify(json)); console.log(JSON.stringify(json)); return json; })
.then(({ token }) => {
localStorage.setItem('token', token);
});
}
if (type === AUTH_GET_PERMISSIONS) {
let newrole = localStorage.getItem('userdata');
newrole = JSON.parse(newrole);
if ( parseInt(newrole.is_admin) === 1 ) {
localStorage.setItem('role', 'admin');
} else {
localStorage.setItem('role', 'user');
}
const role = localStorage.getItem('role');
return Promise.resolve(role);
}
if (type === AUTH_CHECK) {
return localStorage.getItem('token')
? Promise.resolve()
: Promise.reject();
}
if (type === AUTH_LOGOUT) {
localStorage.removeItem('token');
localStorage.removeItem('role');
localStorage.removeItem('userdata');
return Promise.resolve();
}
return Promise.resolve();
}
Я хотел изменить localStorage на sessionStorage везде в authProvider, однако, когда я захотел повторно использовать его, я получил значение null.
Я использую запись "userdata" в нескольких местах, например на панели инструментов, например:
let userData = localStorage.getItem('userdata');
userData = JSON.parse(userData);
class Dashboard extends Component {
state = {
username: userData.name,
fullname: userData.fullname,
Однако, я получил 'name', это пустая ошибка, когда я хочу получить элементы из сеанса следующим образом:
let userData = sessionStorage.getItem('userdata');
userData = JSON.parse(userData);
class Dashboard extends Component {
state = {
username: userData.name,
fullname: userData.fullname,
Что я сделал не так?
Я также где-то читал, что sessionStorage будет работать после монтирования компонента, то есть в тот момент, когда будет определен sessionStorage.
Означает ли это, что я не могу использовать sessionStorage в моем authProvider?