переход с localStorage на sessionStorage в реакции-администратора не работает - PullRequest
0 голосов
/ 06 апреля 2019

Мой 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...