Как добавить аутентификацию токена JWT для защиты маршрутов

#node.js #express #npm #jwt

#node.js #экспресс #npm #jwt

Вопрос:

Я добавил требуемый код, но все равно получаю:

Не удается получить /api/login

Я тестирую это на Postman, а также непосредственно в браузере. Однако я до сих пор не полностью реализовал аутентификацию JWT. Но другие конечные точки api, такие как api/articles , api/update и т.д., api/delete работают нормально. Вот мой код.

server.js

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

const port = (process.env.PORT || 3000);
const app = express();

const api = require('./routes/api');
const cors = require('cors');

app.use(bodyParser.json());
app.use(cors());

app.use('/api', api);
app.get('/', function(req, res) {
    res.send('Server is up and running!');
})

app.listen((3000), function() {
    console.log('Server listening on PORT '   port)
});
 

api.js

 ...
const jwt = require('jsonwebtoken');

router.post('/login', (req, res) => {
    const user = {
        id: 1,
        username: 'tanzeel',
        email: 'tanzeel@fakemail.com',
        password: 'fakepassword' 
    }

    jwt.sign({ user }, 'secretKey', (err, token) => {
        res.json({
            token
        })
    })
})
 

package.json

 ...
"dependencies": {
    "body-parser": "^1.19.0",
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "jsonwebtoken": "^8.5.1",
    "mongoose": "^5.6.13",
    "serve": "^11.3.2"
}
 

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

Пожалуйста, укажите на мою ошибку.

Комментарии:

1. почему вы отправляете запрос GET на маршрут POST?

Ответ №1:

Предполагается, что ваш API входа в систему обрабатывает запрос POST (поскольку вы определили маршрут с помощью router.post(‘/ login’,) ). Поскольку вы отправляете запрос GET от почтальона / браузера, ваш запрос не совпадает ни с одним из определенных вами маршрутов.

Измените тип запроса в postman на POST при выполнении запроса, чтобы получить ответ от сервера.