Express + Passport同时使用多个不同的“本地”登录名

时间:2018-09-01 22:20:58

标签: javascript node.js express passport.js

我想提前致歉。 我英语说的不好。我也不擅长Node。一些“单词”可能不合适或错误。我在我的语言领域找不到任何解决方案。我正在GoogleTranslation的帮助下写这个问题。

我的设备

  • 在OSX上本地化和虚拟化的Ubuntu 16.04
  • Node.js 8.11.4
  • Express 4.16.0
  • 护照0.4.0

如果您需要更多信息,我会回答。

主要问题

我正在使用两个身份验证系统对Web应用程序进行编码。我想同时认证这两个认证。 我的图片在下面。

  

管理员身份验证浏览器一次。然后,不同的用户登录和注销。没有管理员,用户可以访问受限页面。

我的代码在下面淹没了。

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 :(得分:0)

护照只能使用一个登录系统吗?

req.login(),req.logout()req.Authenticated(),Passport会话....

许多功能不能识别两个登录系统之间的区别。