Показать сообщение отдельно
  #1 (permalink)  
Старый 22.12.2018, 21:52
Новичок на форуме
Отправить личное сообщение для mcBiba Посмотреть профиль Найти все сообщения от mcBiba
 
Регистрация: 11.12.2018
Сообщений: 9

Авторизация 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.
Ответить с цитированием