首页 > 其他 > 详细

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

时间:2018-01-30 18:05:38      阅读:274      评论:0      收藏:0      [点我收藏+]

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用户名和密码登陆认证

原文:https://www.cnblogs.com/chyblog/p/8386075.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!