因此,我使用PAM在我的express应用程序中对用户进行身份验证。然而,我很难找到正确的文档和教程来说明如何实现它和配置会话。
下面是PAM的npm模块,名为authenticate-pam
var pam = require('authenticate-pam');
pam.authenticate('username', 'password', function(err) {
if(err) {
console.log(err);
}
else {
console.log("Authenticated!");
}
});我仍然对如何写出这一点持观望态度,我知道我也想实现会话,所以我也关心如何将其与PAM模块集成。下面是我要放在routes/index.js文件中的内容的粗略草稿。
var express = require('express');
var passport = require('passport');
var router = express.Router();
var pam = require('authenticate-pam');
// GET Commands ==========
router.get('/', function(req, res, next) {
res.render('login', { title: 'Login', layout: 'base-layouts/login-layout.hbs'});
});
// POST Commands ==========
router.post('/', function (req, res) {
var usernameCaptured = req.body.username;
var passwordCaputured = req.body.password;
console.log('Username: ' + usernameCaptured); // For debuging
console.log('Password: ' + passwordCaputured); // For debuging
pam.authenticate(usernameCaptured, passwordCaptured, function(err) {
if(err) {
console.log("Not Authenticated");
//Send to login page with error.
}
else {
console.log("Authenticated!");
res.render('dashboard', { title: 'Dashboard', layout: 'base-layouts/dashboard-layout.hbs'});
}
});
});
module.exports = router;这就是我对身份验证的最大收获。至于会话,这是我放在应用程序的app.js (主文件)中的内容。
var passport = require('passport');
var LocalStrategy = require('passport-local').BasicStrategy;
app.use(passport.initialize());
app.use(passport.session());
//This is what I got from the documentation. It's not fully integrated with the PAM module
passport.serializeUser(function(user, done) {
done(null, user.id); //Think this integrates with a DB, but I can just sync usernames with a flat file.
});
passport.deserializeUser(function(id, done) {
done(err, user);
});看起来很简单,但是教程不是很多,很难说出我能用到哪些。他们中的一些人甚至没有解释他们在做什么。希望有人能帮我。
发布于 2017-02-10 01:26:11
试试这个。如果你得到一个SIGTERM,你将不得不以root用户身份运行。不确定这个问题的解决方案是什么。
var passport = require('passport');
var Strategy = require('passport-local').Strategy;
var pam = require('authenticate-pam');
module.exports = function(passport){
// =====================================
// Custom Strategy =====================
// =====================================
passport.use('pam', new Strategy({
usernameField : 'username',
passwordField : 'password',
passReqToCallback : true
},
function(req, username, password, done) {
pam.authenticate(username, password, function(err) {
if(err) {
done(null, false, req.flash('loginMessage', err));
}else{
done(null, username);
}
}, {serviceName: 'login', remoteHost: 'localhost'});
})
);
// =====================================
// PASSPORT SERIALIZE ==================
// =====================================
passport.serializeUser(function(username, done) {
done(null, username);
});
// used to deserialize the user
passport.deserializeUser(function(username, done) {
done(null, username);
});
};https://stackoverflow.com/questions/34035308
复制相似问题