Как сохранить вход в систему до тех пор, пока пользователь не выйдет из приложения реагировать на избыточность? - PullRequest
0 голосов
/ 06 марта 2020

Я работаю над аутентификацией с JWT для простого React-Redux/Node проекта. Мне трудно работать, чтобы войти в систему после обновления или закрытия браузера. Токен корректно сохраняется в локальном хранилище и остается после обновления браузера, как и должно быть. В моем конструкторе файлов приложения. js я добавил функцию для отправки действия getLoggedInUser(), должен запускаться fetch(), отправив токен в заголовке запроса в API, который, в свою очередь, проверит этот токен и отправит ответ. Тем не менее, похоже, что моя fetch() функция никогда не выполняется в моем коде, и я не могу понять, что я делаю неправильно. Любая помощь приветствуется. Ниже мой код:

authActions. js

    //persist a login when your user revisits the page
    export const getLoggedInUser = () => {
    console.log('here') // this is run    
    return (dispatch) => { //but seems this never runs
        const token = localStorage.getItem('token'); //doesnt run
        console.log(token) /doesn't run
        if (token) {
            return fetch(url + 'getloggeduser', {
                        method: "GET",
                        headers: {
                            'Content-Type': 'application/json',
                            'Authorization': `Bearer ${token}`
                        }
                    })
                .then(res => res.json())
                .then(res => {
                    if (res.error) {
                        localStorage.removeItem('token')
                    }
                    else dispatch(logInSuccess(res.user))
                })
            }
        }
    };

Приложение. js

    import React, { Component } from 'react';
    import { connect } from 'react-redux'
    import { getLoggedInUser } from './Store/Actions/authActions'

    class App extends Component {
      componentDidMount() {
        console.log('app component mounts')
        this.props.getLoggedInUser();
      }

      render() { ... }

    const mapDispatchToProps = (dispatch) => {
      return {
        getLoggedInUser: () => dispatch(getLoggedInUser)
      }
    }

    export default connect(null, mapDispatchToProps)(App)

1 Ответ

0 голосов
/ 06 марта 2020

Ваш getLoggedInUser не является создателем действия, он не возвращает объект действия, поэтому его нельзя отправить. Я думаю, вы хотели сделать что-то вроде этого:

const mapDispatchToProps = (dispatch) => {
      return {
        getLoggedInUser: () => getLoggedInUser()(dispatch)
      }
}
...