Реагировать на проверку подлинности на index.js - PullRequest
0 голосов
/ 31 декабря 2018

вчера я изменил способ проверки аутентификации, поместил логику в файл index.js приложения React.Я хочу протестировать некоторые вещи, и я получаю сообщение об ошибке, в котором говорится, что localStorage не определено, хотя я настроил фиктивный localStorage в блоке beforeAll.

Это лучший способ сделать это, или есть лучший способ или какЯ избегаю этой ошибки?

Вот индексный файл:

import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import { Router } from "react-router-dom";
import { createStore, applyMiddleware, compose } from "redux";
import { Provider } from "react-redux";
import thunk from "redux-thunk";
import logger from "redux-logger";
import history from "./history";
import jwt_decode from 'jwt-decode';

import "./style.css";
import "semantic-ui-css/semantic.css";

import reducer from "./reducers/index";
import { getCurrentUser, logout } from "./actions/authActions/authActions";

export const store = createStore(reducer, compose(applyMiddleware(thunk, logger)));


if (localStorage.getItem('token')) {

    // decode token and get user info and expiration
    // decoded = ID
    const decoded = jwt_decode(localStorage.getItem('token'))
    // set User and isAuthenticated (to keep user logged in)
    store.dispatch(getCurrentUser(decoded._id))
    // check for expired token
    const currentTime = Date.now() / 1000
    if (decoded.exp < currentTime) {
        // Log out the user
        store.dispatch(logout())

        // Rediret to login page if token is expired
        history.push('/login')
    }
}

ReactDOM.render(
    <Provider store={store}>
        <Router history={history}>
            <App />
        </Router>
    </Provider>,
    document.getElementById("root")
);

1 Ответ

0 голосов
/ 31 декабря 2018

Перед вызовом метода localStorage вы можете:

if (window.localStorage && localStorage.getItem) {
    if (localStorage.getItem('token')) {
        //...
    }
}

history.push('/enable-browser-storage-page');

Это гарантирует, что локальное хранилище включено пользователем.Если это не так, перенаправьте этого пользователя на страницу с инструкциями по включению.

Кроме того, вы можете добавить функцию, которая проверяет, доступно ли локальное хранилище или нет:

function lsTest(){
    var test = 'test';
    try {
        localStorage.setItem(test, test);
        localStorage.removeItem(test);
        return true;
    } catch(e) {
        return false;
    }
}

if(lsTest() === true){
    if (localStorage.getItem('token')) {
        //...
    }
}else{
    history.push('/enable-browser-storage-page');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...