JWT Token не будет генерироваться на Heroku - PullRequest
0 голосов
/ 10 сентября 2018

Это супер странно. У меня все работает при запуске приложения Node.js на локальном хосте. Но после развертывания в Heroku он всегда дает мне 400 Bad Request и пустое тело ответа {}. Я протестировал обе среды с одним и тем же запросом почтальона, меняя только базовый URL.

Вот мой метод сообщения:

app.post('/users', (req, res) => {
var body = _.pick(req.body, ['email', 'password', 'f_name', 'l_name', 'phone', 'address']);
var user = new User(body);

user.save().then(() => {
  return user.generateAuthToken();
}).then((token) => {
  res.header('x-auth', token).send(user);
}).catch((err) => {
  res.status(400).send(err);
});
});

В конце концов, я увидел, что всякий раз, когда я пытался создать токен при публикации нового пользователя, моя db localhost работает, но токен в среде Heroku не создавался.

Что означает, что эта функция является наиболее подозрительной из всех:

UserSchema.methods.generateAuthToken = function () {
var user = this;
var access = 'auth';
var token = jwt.sign({_id: user._id.toHexString(), access}, process.env.JWT_SECRET).toString();

user.tokens = user.tokens.concat([{access, token}]);

return user.save().then(() => {
    return token;
}).catch((err) => {
    return err;
});
};

Чего я не понимаю, так это то, что может иметь значение в среде развертывания? И как я узнаю, что пошло не так в Heroku? При локальном запуске мы обычно получаем эти журналы ошибок, журналы heroku не приносят никакой пользы. И хотя я пытался поймать ошибку и вернуть ее, в тело ответа почтальона ничего не пришло.

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Вы проверили, правильно ли принимаются и анализируются переменные среды, установленные в Heroku? Я заметил, что при моем развертывании, где я использовал шифрование rsa для моего секрета, символы новой строки не распознавались.

Локально

-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz7pZEypvrFJCDshsbOam\nj9bmy/dXnUOyCo5b3xSvvTNIoFAC5ePXozCD/5Byih1JB6ZYE6OceEW6oArkPzZO\nl8bFBlqV9k30oerMtVei18+CfF/uFLWlJXs9FvXrRTKtsL43OmpLCH3LdzK9/+Zq\nhEx/TShp3JudUWuRW8ALqrBd8QW5CWJHYozYVaIpFzwJ9KW6fJ9GpZfcToCOquLW\no8iINnAovXmvcAtdmzgIqoucD988f9oerll/CubJLy2rOiyeRvsAYouoefoyQZWN\n8IYPlnb5IB6Z7qnVL6rZz44dAjVwS3uARW3lxpfeZn3TN7wpPkBssGBF0OSEHNrX\nVwIDAQAB\n-----END PUBLIC KEY-----

будет зарегистрирован как

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz7pZEypvrFJCDshsbOam
j9bmy/dXnUOyCo5b3xSvvTNIoFAC5ePXozCD/5Byih1JB6ZYE6OceEW6oArkPzZO
l8bFBlqV9k30oerMtVei18+CfF/uFLWlJXs9FvXrRTKtsL43OmpLCH3LdzK9/+Zq
hEx/TShp3JudUWuRW8ALqrBd8QW5CWJHYozYVaIpFzwJ9KW6fJ9GpZfcToCOquLW
o8iINnAovXmvcAtdmzgIqoucD988f9oerll/CubJLy2rOiyeRvsAYouoefoyQZWN
8IYPlnb5IB6Z7qnVL6rZz44dAjVwS3uARW3lxpfeZn3TN7wpPkBssGBF0OSEHNrX
VwIDAQAB
-----END PUBLIC KEY-----

но в Heroku он будет записан точно так, как я его предоставил - все, что отображается в одной строке, включая символы новой строки. Установка переменных окружения Heroku с явным форматированием, похоже, исправила мою проблему с подписью.

0 голосов
/ 10 сентября 2018

Полагаю, библиотека JWT не установлена ​​в среде Heroku. Пожалуйста, попробуйте сделать npm install в среде Heroku.

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