неопределенный токен jwt реагирует / экспресс - PullRequest
0 голосов
/ 08 июня 2018

Я использую аутентификацию JWT в системе входа / регистрации.При успешном входе в систему / регистрации я устанавливаю токен пользователя в localStorage.

Проблема в том, что когда я проверяю свой localStorage, ключ пользователя присутствует, но значение не определено.Я думаю, что проблема может быть в моем сообщении axios или в моем экспресс-файле, но я не могу понять это.

// my action creator
export function login(user, history) {
return async (dispatch) => {
  axios.post('/api/login', { user })
  .then(res => {
      dispatch({ type: AUTHENTICATED });
      localStorage.setItem('user', res.data.token);
      history.push('/');
  })
  .catch((error) => {
      dispatch({
          type: AUTHENTICATION_ERROR,
          payload: 'Invalid email or password'
      });
  });
 };
}

Данные правильно достигают моего API.Элемент устанавливается, но значение res.data.token не определено. Ниже приведен мой экспресс-файл

// login.js (/api/login)
router.post('/', function(req, res) {
var email = req.body.user.email;
var password = req.body.user.password;
// TODO: create db file and import connection
var connection = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "",
    database: "dbname",
    port: 3307
});

connection.connect(function(err) {
    if(err) {
        console.log(err);
    } else {
        connection.query("SELECT ID, Password FROM Users WHERE Email = ?", [email], function(err, result) {
            if(err) {
                console.log('Could not find account');
                res.send(err);
            } else {

                var id = result[0].ID;

                bcrypt.compare(password, result[0].Password, function(err, result) {
                    if(result) {
                        console.log(id);
                        res.json({ id });
                    } else {
                        console.log('Incorrect password');
                    }
                });
            }
        });
      }
    });
});

Поскольку res.data.token в моем создателе действий возвращает неопределенное значение, это означает, что ответв моем экспресс-файле (res.json ([id])) просто возвращается определенный?

1 Ответ

0 голосов
/ 08 июня 2018

Вы не отправляете ответ должным образом.

res.json([id]); Это просто отправка array of id.Вот почему res.data.token не определено.поскольку data не содержит объект.

Отправьте соответствующий объект, например:

res.json({id});

...