проблема с PassportJs при входе в систему как пользователь, то пользователь может получить доступ к страницам администратора - PullRequest
0 голосов
/ 30 октября 2019

У меня проблема с PassportJs, когда я пытаюсь войти в систему как пользователь, тогда я могу получить доступ к админ-панели без входа в систему как администратор только потому, что я уже вошел в систему как пользователь!

Я очень старался, но все равно получаюПанель администратора, как только я войду как пользователь.

вот мой код

var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var session = require('express-session')
var doctorapp = require('./routes/doctor');
var receptionapp = require('./routes/reception');
var usersapp = require('./routes/users');
var app = express();
var sha1  = require('sha1');
var DBs = require('./conf');
var passportDr = require('passport'), LocalStrategyDr = require('passport-local').Strategy;
var passportRe = require('passport'), LocalStrategyRe = require('passport-local').Strategy;

passportDr.use('local-doctor', new LocalStrategyDr(
    function(username, password, done) {
      DBs('doctors').select().where('doctor_name', username).andWhere('doctor_pass', sha1(password)).then((dr)=>{
        console.log(dr)
        if(dr.length > 0 ){
          return done(null, dr[0]);
        }else{
          return done(null, false);
        }
      })  
    }
  ))

passportDr.serializeUser(function(dr, done) {done(null, dr)});
passportDr.deserializeUser(function(dr, done) {done(null, dr)});

passportRe.use('local-reception', new LocalStrategyRe(
  function(username, password, done) {
    DBs('reception').select().where('reception_name', username).andWhere('reception_pass', sha1(password)).then((resep)=>{
      if(resep.length > 0 ){
        return done(null, resep[0]);
      }else{
        return done(null, false);
      }
    })  
  }
))

passportRe.serializeUser(function(resep, done) {done(null, resep)});
passportRe.deserializeUser(function(resep, done) {done(null, resep)});

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({secret: 'keyboard cat', resave:true, saveUninitialized:true }));
app.use('/', usersapp);


app.use(passportDr.initialize());
app.use(passportDr.session());

app.post('/lockdr', passportDr.authenticate('local-doctor', {successRedirect: '/dr', failureRedirect: '/lockdr'}));
app.use('/dr', drlogin, doctorapp);

function drlogin (req, res, next) {
  if(req.isAuthenticated() ) {
    next();
  }else{
    res.redirect('/lockdr')
  }
}


app.use(passportRe.initialize());
app.use(passportRe.session());

app.post('/', passportRe.authenticate('local-reception', {successRedirect: '/re', failureRedirect: '/'}));
app.use('/re', relogin, receptionapp);

function relogin (req, res, next) {
  if(req.isAuthenticated() ) {
    next();
  }else{
    res.redirect('/')
  }
}


module.exports = app;

Итак, как я могу отклонить запрос пользователя при попытке доступа в админ-панель через URL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...