基于Express实现Passport用户名和密码登陆认证

Posted 洛河

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Express实现Passport用户名和密码登陆认证相关的知识,希望对你有一定的参考价值。

Passport项目是一个基于Nodejs的认证中间件。

Passport可以根据应用程序的特点,配置不同的认证机制。本文将介绍,用户名和密码的认证登陆。

 

1.express项目安装这里就不多说了,可以去express中文网拉下项目;

http://www.expressjs.com.cn/

 

2.安装依赖;

npm install passport
npm install passport-local

passport-local

使用用户名和密码进行本地身份验证。通过插入Passport,本地身份验证可以集成到支持中间件(包括express )的应用程序或框架中 。

 

3.配置中间件;

var express = require(‘express‘);
var session = require(‘express-session‘);
var passport = require(‘passport‘);

app.use(passport.initialize());
app.use(passport.session());

引入依赖并且初始化。

4.验证策略

var LocalStrategy = require(‘passport-local‘);

// 用户名密码验证策略
passport.use(new LocalStrategy({
        usernameField: ‘username‘,
        passwordField: ‘password‘
    },
    function (name, password, done) {
        UserModel.findOne({ name: name }).then(function (result) {
            if (result != null) {
                if (result.password == password) {
                    return done(null, result);
                } else {
                    return done(null, false, { message: ‘密码错误‘ });
                }
            } else {
                return done(null, false, { message: ‘用户不存在‘ });
            }
        }).catch(function (err) {
            return done(null, false, { message: err.message });
        });
    }
));

5.session序列化与反序列化

验证用户提交的凭证是否正确,是与session中储存的对象进行对比,所以涉及到从session中存取数据,需要做session对象序列化与反序列化:

passport.serializeUser(function(user, done) {
  done(null, user.id);
});
passport.deserializeUser(function(id, done) {
  User.findById(id, function(err, user) {
    done(err, user);
  });
});

 

6.拦截请求

var express = require(‘express‘);
var router = express.Router();

var passport = require(‘passport‘);
// 登录认证
router.post(‘/login‘, function (req, res, next) {
    passport.authenticate(‘local‘, { successRedirect: ‘/‘, failureRedirect: ‘/login‘ })(req, res);
});

OK,大功告成。

  

以上是关于基于Express实现Passport用户名和密码登陆认证的主要内容,如果未能解决你的问题,请参考以下文章

phonegap ajax 用户身份验证与 nodejs-express-mongodb-passport js

Passport.JS 卡在重定向

Node.js 和 Passport 对象没有方法 validPassword

没有使用 express 和 passport 设置 Cookie

用户未定义:Nodejs/Express + Passport

使用 Passport.js、express-session 和 express-mysql-session 进行用户身份验证