Node.js 模块之【passport】进行本地【用户名+密码】鉴权(一)

这篇博客详细介绍了如何在Node.js应用中利用passport模块进行本地用户名和密码鉴权。从安装passport到配置session存储,包括实现回调函数、设置本地策略、登录状态管理和路由中的实际应用等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 安装 passport
npm i passport
npm i passport-local
2. 添加模块(上面几个为依赖模块)
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
3. 实现一些基本回调
passport.serializeUser(function(user, done) {
    done(null, user.id);
});
passport.deserializeUser(function(id, done) {
    UserModel.findById(id, function(err, user) {
        done(err, user);
    })
});
4. 使用本地策略

passport.use(new LocalStrategy(function(username, password, done) {
    UserModel.findOne({
        username: username
    }, function(err, user) {
        if (err) {
            return done(err);
        } else {
            if (!user) {
                return done(null, false, {
                    message: '用户名不存在'
                });
            }
            if (!user.password == password) {
                return done(null, false, {
                    message: '密码不匹配'
                });
            }
            return done(null, user);
        }
    });
}));
5. login时,通过logIn方法设置状态
    app.post('/login', function(req, res, next) {
        passport.authenticate('local', function(err, user, info) {
            if (err) {
                return next(err);
            }
            if (!user) {
                return res.redirect('/login');
            }
            // res.redirect('/users');
            req.logIn(user, function(err) {
                if (err) {
                    return next(err);
                }
                return res.redirect('/users');
            });
        })(req, res, next);
    });
6. 将passport中自定义的req.isAuthenticated 封装为插件

var isAuthenticated = function(req, res, next) {
        if (req.isAuthenticated()) {
            return next();
        }
        res.redirect('/login');
    }
7. 设置session保存至数据库
app.use(session({
    resave: false,
    saveUninitialized: true,
    cookie: {
        maxAge: 3600000 //单位:毫秒
    },
    secret: "robin shop",
    store: new MongoStore({
        url:'mongodb://localhost/emberExpressMongoDB'
    })
}));
8. 初始化passport
app.use(passport.initialize());
app.use(passport.session());
9. 路由中的使用
app.use('/users', isAuthenticated, users);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值