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

  

转载于:https://www.cnblogs.com/chyblog/p/8386075.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值