Вход

Просмотр полной версии : Авторизация Passort.js


mcBiba
22.12.2018, 21:52
Авторизация passport.js проходит успешно.
Хочу сделать так, что бы выход из системы осуществлялся без отверждения (confirm) и уже после выхода из системы была возможность вернуться обратно.

config-passport.js

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;

let Sequelize = require('sequelize');
let sequelize = new Sequelize('DBNAME', 'USERNAME', 'PASS', {
host: 'localhost',
dialect: 'mysql',
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
},
define: {
timestamps: false
}
});

let Users = sequelize.define('users', {
id: {
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
email: {
type: Sequelize.STRING,
notEmpty: true
}
....
password: {
type: Sequelize.STRING,
allowNull: false
}
....
});


passport.serializeUser(function(user, done) {
done(null, [user.id,user.email,user.password]);
});

passport.deserializeUser(function(id, done) {
Users.findAll({where:{id:id}}).then(function(row){
const user = row[0].dataValues.id === id ? {
id: row[0].dataValues.id,
email: row[0].dataValues.email,
password: row[0].dataValues.password,
} : false;
done(null, {
id: row[0].dataValues.id,
email: row[0].dataValues.email,
password: row[0].dataValues.password,
});
});
});

passport.use(
new LocalStrategy({passReqToCallback : true,usernameField: 'email'}, function(
email,
req,
password,
done
) {
Users.findAll({where:{email:email}}).then(function (row){
if (email === row[0].dataValues.email && password === row[0].dataValues.password) {
return done(null, {
id: row[0].dataValues.id,
email: row[0].dataValues.email,
password: row[0].dataValues.password,
});
} else {

}
return done(null, false);
});
})
);



При выходе из системы ('/logout') я параметры пользователя перегружаю в другую сессию, но вот только как сделать авторизацию через сессии, а не данные отправленные из формы (POST)?

logout

app.get('/logout', (req, res) => {
req.session.comeBack = req.session.passport.user;
req.logOut();
res.json({message:'getout'});
});


Я нашел, что надо в указать passReqToCallback :true в локальной стратегии но он как то не хочет видеть req в passport.use.

mcBiba
23.12.2018, 02:47
UPDATE
Req получилось передать при login
app.post('/login',urlencodedParser, (req, res, next) => {
passport.authenticate('local',req function(err, user) {
if (err) {
return next(err);
}
if (!user) {
return res.json({message:'loginOrPassword'});
}
req.logIn(user, function(err) {
if (err) {
return next(err);
}
return res.json({message:'welcome'});
});
})(req, res, next);
});

Passport-config
passport.use(
new LocalStrategy({passReqToCallback :true, usernameField: 'email'}, function(
req,
email,
password,
done
) {
console.log(email+ " "+password);
if(req.session.comeBack && (req.session.comeBack[1] && req.session.comeBack[2])){
email = req.session.comeBack[1];
password = req.session.comeBack[2];
}
console.log(email + " "+password);
Users.findAll({where:{email:email}}).then(function (row){
if (email === row[0].dataValues.email && password === row[0].dataValues.password) {
return done(null, {
id: row[0].dataValues.id,
email: row[0].dataValues.email,
password: row[0].dataValues.password,
});
} else {

}
return done(null, false);
});
})
);