Я использую JWT с паспортом для аутентификации в своем приложении. Я использую MongoDB и Mongoose для базы данных. Я добавил пользователя с username = manager и password = manager с функцией addManager, пароль, сохраненный в db, не является «менеджером», а: «$ 2b $ 10 $ O7YAgTJKETOY.lanZoErWum2e6ZPpVi.RjMp0VHKfMT82z9uEmrlS« Я не знаю почему! и я не могу войти с паролем: "менеджер". Я не знаю, в чем проблема. Я использовал эта статья для своего кода. если вы понимаете, что не так, скажите мне.
app.js:
//settings and Requirements
const express = require('express');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const path = require('path');
const mongoose = require('mongoose');
const passport = require('passport');
const config = require('./api/config/database');
mongoose.connect(config.database);
let db = mongoose.connection;
require('./api/config/auth');
db.once('open', function () {
console.info('connected to mongodb...');
});
db.on('error', function (error) {
console.info(error);
});
let User = require('./api/models/user');
let basics = require('./api/config/basics');
let port = process.env.PORT || 8080;
const app = express();
app.use(bodyParser.urlencoded({
extended: false
}));
app.use(bodyParser.json());
app.use(bodyParser.json({
type: 'application/vnd/api+json'
}));
app.use(cookieParser());
basics.addManager(basics.manager);
router(app);
app.listen(port, function (err) {
if (err)
console.info(err);
console.info("port is " + port);
});
auth.js:
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const User = require('../../api/models/user');
const passportJWT = require("passport-jwt");
const JWTStrategy = passportJWT.Strategy;
const ExtractJWT = passportJWT.ExtractJwt;
passport.use(new LocalStrategy({
usernameField: 'username',
passwordField: 'password'
},
function (username, password, cb) {
//this one is typically a DB call. Assume that the returned user object is pre-formatted and ready for storing in JWT
return User.findOne({username:username, password:password})
.then(user => {
if (!user) {
return cb(null, false, {message: 'Incorrect username or password.'});
}
return cb(null, user, {message: 'Logged In Successfully'});
})
.catch(err => cb(err));
}
));
passport.use(new JWTStrategy({
jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
secretOrKey : 'your_jwt_secret'
},
function (jwtPayload, cb) {
//find the user in db if needed. This functionality may be omitted if you store everything you'll need in JWT payload.
return User.findOneById(jwtPayload.id)
.then(user => {
return cb(null, user);
})
.catch(err => {
return cb(err);
});
}
));
Authenticate.js:
const express = require('express');
const passport = require('passport');
const jwt = require('jsonwebtoken');
const router = express.Router();
router.post('/login', function (req, res, next) {
console.info(req.body);
passport.authenticate('local', {session: false}, (err, user, info) => {
console.info(user);
if (err || !user) {
return res.status(400).json({
message: info ? info.message : 'Login failed',
user : user
});
}
req.login(user, {session: false}, (err) => {
if (err) {
res.send(err);
}
// generate a signed son web token with the contents of user object and return it in the response
const token = jwt.sign(user, 'your_jwt_secret');
return res.json({user, token});
});
})(req, res);
});
module.exports = router;
addManager: `
addManager : function(manager){
let newUser = new User({
username : manager.username,
password : manager.password,
isManager : true
});
newUser.save(function(err , user){
if (err)
console.info(err);
console.info('manager added successfuly');
});
}
`
Много кода и мало текста. Кажется, единственный вопрос: «Почему пароль сохраняется именно так, а не в виде открытого текста?» верно? И в результате этой проблемы вы не можете проверить пароль и, следовательно, токен не создан, верно?
Привет. да именно в этом моя проблема. Извините, я подумал, что нужно скопировать сюда все коды.
Ваш пароль хеширован, поэтому пароль не будет «менеджер»





Бро, опубликуйте минимальный код, необходимый для демонстрации вашей проблемы.