Авторизация Passort.js
Авторизация 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. |
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); }); }) ); |
Часовой пояс GMT +3, время: 07:25. |