я учусь jwt
и passport
, я пытаюсь сделать проверку после входа в систему с корректными учетными данными, но всегда возвращается 401 Unauthorized
, я не знаю почему.
Мой код node.js, который генерирует jwt
:
const express = require('express');
const bodyParser = require('body-parser');
const _ = require("lodash");
const app = express();
const jwt = require('jsonwebtoken');
const passport = require('passport');
const passportJWT = require('passport-jwt');
const ExtractJwt = passportJWT.ExtractJwt;
const JwtStrategy = passportJWT.Strategy;
app.use(passport.initialize());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
var jwtOptions = {}
jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
jwtOptions.secretOrKey = 'tasmanianDevil';
var strategy = new JwtStrategy(jwtOptions, function(jwt_payload, next) {
console.log('payload received', jwt_payload);
var user = users[_.findIndex(users, {
id: jwt_payload.id
})];
if (user) {
next(null, user);
} else {
next(null, false);
}
});
passport.use(strategy);
var users = [{
id: 1,
name: 'jonathanmh',
password: '%2yx4'
},
{
id: 2,
name: 'test',
password: 'test'
}
];
app.post("/login", function(req, res) {
if (req.body.name && req.body.password) {
var name = req.body.name;
var password = req.body.password;
}
var user = users[_.findIndex(users, {
name: name
})];
if (!user) {
res.status(401).json({
message: "no such user found"
});
}
if (password === user.password) {
var payload = {
id: req.body.id
};
var token = jwt.sign(payload, jwtOptions.secretOrKey);
res.send({
message: "ok",
token: token
});
} else {
res.status(401).json({
message: "passwords did not match"
});
}
});
И мой маршрут защищен:
app.get('/pageOwnerAgency', passport.authenticate('jwt', { session: false }), (req, res) => {
res.send({message: 'foi'})
});
То, что я понял, было то, что маршрут выше проверяет, есть ли jwt
. Но это не работает ...
Мой компонент, который делает ajax:
handleLogin = () => {
axios.post('/login', { name: this.state.name, password: this.state.password })
.then(res => {
localStorage.setItem('jwt', res.data.token)
window.location.reload();
})
.catch(error => console.log(error.response.data.message))
}
И мой владелец страницыАгентство, получающее сообщение:
componentDidMount() {
axios.get('/pageOwnerAgency')
.then(res=>console.log(res.data.message))
.then(error=>console.log(error))
}
Кто-нибудь, помогите мне, пожалуйста?