Экспресс REST API войти сразу 401 ошибка - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть этот контроллер для маршрута входа, единственная проблема в том, что он не работает ... Он работал вчера, я ничего не изменил, а теперь нет.Он просто падает до блока catch и выдает ошибки, однако на самом деле ошибки нет, и я не совсем уверен, куда идти дальше.

Вот мой app.js

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');

const systemRoutes = require('./routes/system');
const recipeRoutes = require('./routes/recipes');
const authRoutes = require('./routes/auth');

const app = express();


app.use(bodyParser.json());

app.use((req, res, next) => {
    res.setHeader('Access-Control-Allow-Origin', '*'); // Change later to only allow our server
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE');
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
    next();
});


app.use('/api/system', systemRoutes);
app.use('/api/feed', recipeRoutes);
app.use('/api/auth', authRoutes);


// TODO: Add error handling and validation


mongoose.connect('mongodb://localhost:27017/learn')
    .then(result => {
        app.listen(8080);
    })
    .catch(err => {
        console.error(err);
    });

Вот мой контроллер:

exports.login = (req, res, next) => {
    let fetchedUser;
    User.findOne({ username: req.body.username })
        .then(user => {
            if (!user) {
                return res.status(401).json({
                    message: 'Auth failed'
                });
            }

            fetchedUser = user;
            return bcrypt.compare(req.body.password, user.password);
        })
        .then(result => {
            if (!result) {
                return res.status(401).json({
                    message: 'Auth failed'
                });
            }

            // TODO: Replace "secret_sauce" with secret key
            const token = jwt.sign(
                { username: fetchedUser.username, userId: fetchedUser._id },
                'secret_sauce',
                { expiresIn: '30d' }
            );

            res.status(200).json({
                token: token,
                userId: fetchedUser._id
            });
        })
        .catch(err => {
            return res.status(401).json({
                message: 'Error trying to login',
                error: err
            });
        });
}

Также вот изображение ошибки: enter image description here

1 Ответ

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

Поскольку информации о том, что не так, очень мало, я просто попытаюсь предложить другой подход к отладке:

Вы проверяли, что входит в req.body?

И вы уверены, что оно проваливается до catch заявления?Потому что, если это так, объект ошибки не должен быть пустым.

Мой совет, чтобы отказаться от этой возможности, было бы изменить сообщения об ошибках, которые вы выдаваете, на что-то более представительное для блока, из которого они выбрасываются.Например, cannot find that userId в первый раз, когда вы отправляете res.status(401).

Еще один совет - на самом деле изменить коды состояния, чтобы лучше передавать вид возникающей ошибки.Запрещенное в основном относится к ошибкам на стороне клиента - например, к попытке доступа к защищенному маршруту без действительного токена.

Например:

  if(!user) {
    res.status(404).json({
      message: 'Couldn\'t find the username provided.'
     });
    }

Надеюсь, это был полезный отзыв!

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