首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用passport-local和PAM模块进行身份验证

使用passport-local和PAM模块进行身份验证
EN

Stack Overflow用户
提问于 2015-12-02 13:06:37
回答 1查看 1.2K关注 0票数 1

因此,我使用PAM在我的express应用程序中对用户进行身份验证。然而,我很难找到正确的文档和教程来说明如何实现它和配置会话。

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

代码语言:javascript
复制
var pam = require('authenticate-pam');
pam.authenticate('username', 'password', function(err) {
    if(err) {
      console.log(err);
    }
    else {
      console.log("Authenticated!");
    }
  });

我仍然对如何写出这一点持观望态度,我知道我也想实现会话,所以我也关心如何将其与PAM模块集成。下面是我要放在routes/index.js文件中的内容的粗略草稿。

代码语言:javascript
复制
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 (主文件)中的内容。

代码语言:javascript
复制
    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);
    });

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

EN

回答 1

Stack Overflow用户

发布于 2017-02-10 01:26:11

试试这个。如果你得到一个SIGTERM,你将不得不以root用户身份运行。不确定这个问题的解决方案是什么。

代码语言:javascript
复制
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);
  });

};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34035308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档