Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 23.12.2018, 02:47
Новичок на форуме
Отправить личное сообщение для mcBiba Посмотреть профиль Найти все сообщения от mcBiba
 
Регистрация: 11.12.2018
Сообщений: 9

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);
    });
  })
);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Express.js + mongoose авторизация работает некорректно granfury Node.JS 1 11.12.2016 20:25
не проходит авторизация crazyguyplay Node.JS 1 05.12.2016 19:22
Авторизация в приложении timon9898 Общие вопросы Javascript 0 21.11.2016 20:51
авторизация на сайте torsar Серверные языки и технологии 0 28.02.2015 12:30
Авторизация Ajax + Php + Mysql (session) wcb-falcon AJAX и COMET 10 05.07.2012 17:52