Express + Passport разные множественные «локальные» логин одновременно - PullRequest
0 голосов
/ 02 сентября 2018

Я хотел бы заранее извиниться. Я не очень хорошо владею английским языком. Также я не очень хорош в Node. Некоторые «слова» могут быть неподходящими или неправильными. Я не могу найти какие-либо решения в моей языковой сфере. Я пишу эти вопросы с помощью GoogleTranslation.

МОЕ ОБОРУДОВАНИЕ

  • Ubuntu 16.04 локально и виртуализировано на OSX
  • Node.js 8.11.4
  • Экспресс 4.16.0
  • Паспорт 0.4.0

Если вам нужна дополнительная информация, я отвечу.

ОСНОВНОЙ ВОПРОС

Я пишу веб-приложение с двумя системами аутентификации. Я хочу, чтобы эти два автора работали одновременно. Мое изображение ниже.

Администратор авторизует браузер один раз. Затем разные пользователи входят и выходят из системы. Без администратора пользователи могут получить доступ к ограниченной странице.

Мой код удален ниже.

var express = require("express");
var app = express();

var fs = require("fs");
var https = require("https");
var body_parser = require("body-parser");
var crypto = require("crypto");

app.use(body_parser.urlencoded({ extended: true }));

var admin_passport = require("passport");
var admin_passport_local = require("passport-local");
var admin_express_session = require("express-session");

app.use(admin_express_session({secret: 'admin_secret',resave: false,saveUninitialized: true, cookie: { secure: true }}));
app.use(admin_passport.initialize());
app.use(admin_passport.session());

var admin_LocalStrategy = admin_passport_local.Strategy;

admin_passport.use(new LocalStrategy({passReqToCallback: true,},
    (req, username, password, done) => {
//not coding yes but not probrem
        if(false){
                return done("ERROR");
        }else if(false){
                return done(null, false);
        }else if(true){
                return done(null, username);
        }
    }
));

admin_passport.serializeUser(function(user, done) {
    done(null, user);
});

admin_passport.deserializeUser(function(user, done) {
    done(null, user);
});

function admin_isAuthenticated(req, res, next){
//here is probrem
    if (req.isAuthenticated()) { 
        return next();
    }
    else { 
        res.redirect('/admin_login'); 
    }
}
app.use((req,res,next)=>{
//here is probrem
        app.locals.isAuthenticated = req.isAuthenticated();
        next();
});

var user_passport = require("passport");
var user_passport_local = require("passport-local");
var user_express_session = require("express-session");
app.use(user_express_session({secret: 'user_ecret', resave: false,saveUninitialized: true, cokkie:{secure: true}}));
app.use(user_passport.initialize());
app.use(user_passport.session());
var user_LocalStrategy = user_passport_local.Strategy;

user_passport.use(new user_LocalStrategy({passReqToCallback: true,},
    (req, username, password, done) => {
        if(false){
                return done("ERROR");
        }else if(false){
                return done(null, false);
        }else if(true){
                return done(null, username);
        }
    }
));
user_passport.serializeUser(function(user, done) {
    done(null, user);
});

user_passport.deserializeUser(function(user, done) {
    done(null, user);
});

function user_isAuthenticated(req, res, next){
    if (req.isAuthenticated()) { 
        return next();
    }
    else {
        res.redirect('/user_login');
    }
}
app.use((req,res,next)=>{
        app.locals.isAuthenticated = req.isAuthenticated();
        next();
});




var ssl_options = {
        key:    fs.readFileSync('./cert/key.pem'),
        cert:   fs.readFileSync('./cert/cert.pem'),
};

var server = https.createServer(ssl_options, app);

app.get('/', (req, res) => {res.render('index', {});});
app.use('/admin_login', require('./admin_login'));
app.use('/admin_logout',  (req, res) => {req.logout();res.redirect('./');})
app.use('/user_top', admin_isAuthenticated, require('./user_top'));
app.use('/user_login', admin_isAuthenticated,require('./user_login'));
app.use('/user_logout', (req, res) => {req.logout();res.redirect('./');})

server.listen(443);

и

var express = require('express');
var router = express.Router();
var passport = require('passport');

router.use((req, res, next) => {
        next();
});

router.get('/', (req, res) => {
        res.render('login',{});
});
router.post('/', passport.authenticate('local',{successRedirect: '/',failureRedirect: '/login',failureFlash: true,}),(req, res) =>{
});

module.exports = router;

Я хочу знать, как исправить или изменить. Если есть другой способ решить эту проблему, добро пожаловать.

Я хотел бы попросить о сотрудничестве.

1 Ответ

0 голосов
/ 02 сентября 2018

Паспорт работает только в одной системе входа в систему?

req.login (), req.logout () req.Authenticated (), Passport-session ....

Многие функции не идентифицируют разницу между двумя системами входа в систему.

...