gpt4 book ai didi

node.js - 使用 Passport 本地和 PAM 模块进行身份验证

转载 作者:太空宇宙 更新时间:2023-11-04 02:19:47 25 4
gpt4 key购买 nike

因此,我使用 PAM 对我的 Express 应用程序中的用户进行身份验证。但是,我无法找到有关如何实现它和配置 session 的正确文档和教程。

这是 PAM 的 npm 模块,名为 authenticate-pam

var pam = require('authenticate-pam');
pam.authenticate('username', 'password', function(err) {
if(err) {
console.log(err);
}
else {
console.log("Authenticated!");
}
});

对于如何写出来,我仍然犹豫不决,我知道我也想实现 session ,所以我也关心如何将其与 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;

这就是我所得到的授权。至于 session ,这是我放置在应用程序的 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);
});

看起来很简单,但是教程不多,很难说我可以使用哪些。他们中的一些人甚至没有解释他们在做什么。希望有人能帮助我。

最佳答案

试试这个...如果您收到 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);
});

};

关于node.js - 使用 Passport 本地和 PAM 模块进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34035308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com