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,大功告成。