Nodejs用户认证中间件passport的使用

Nodejs用户认证中间件passport的使用
Passport.js 是一个用于 Node.js 应用程序的强大身份验证中间件。它支持多种认证策略,如本地、OAuth、JWT 等。下面我将展示如何在 Express 应用中使用 Passport.js 实现本地认证。

1. 安装依赖

首先,你需要安装 express, passport, passport-local 以及 express-session

npm install express passport passport-local express-session

2. 设置 Express 和 Passport

创建一个基本的 Express 应用,并配置 Passport:

const express = require('express');
const session = require('express-session');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;

const app = express();

// 使用 session 中间件
app.use(session({
    secret: 'your_secret_key',
    resave: false,
    saveUninitialized: false
}));

// 初始化 Passport
app.use(passport.initialize());
app.use(passport.session());

// 配置 Passport 使用 LocalStrategy
passport.use(new LocalStrategy(
    function(username, password, done) {
        // 这里应该查询数据库来验证用户名和密码
        if (username === 'test' && password === 'password') {
            return done(null, { id: 1, username: 'test' });
        } else {
            return done(null, false, { message: 'Incorrect username or password.' });
        }
    }
));

// 序列化和反序列化用户
passport.serializeUser(function(user, done) {
    done(null, user.id);
});

passport.deserializeUser(function(id, done) {
    // 查询数据库以获取用户信息
    done(null, { id: 1, username: 'test' });
});

3. 创建路由处理登录和注销

app.get('/', (req, res) => {
    res.send(req.user ? `Hello ${req.user.username}!` : 'Welcome to the site.');
});

app.post('/login', 
    passport.authenticate('local', { 
        successRedirect: '/', 
        failureRedirect: '/login', 
        failureFlash: true 
    })
);

app.get('/logout', (req, res) => {
    req.logout();
    res.redirect('/');
});

app.listen(3000, () => console.log('Server running on port 3000'));

4. 用户认证状态检查

在需要保护的路由上使用 req.isAuthenticated() 方法检查用户是否已认证:

app.get('/protected', (req, res, next) => {
    if (req.isAuthenticated()) {
        res.send('Welcome to the protected route!');
    } else {
        res.status(401).send('Access denied');
    }
});

以上就是一个简单的使用 Passport.js 实现本地认证的示例。你可以根据自己的需求调整配置,比如使用数据库存储用户信息等。


3 回复

当然!Passport.js 是一个非常强大的 Node.js 认证中间件,它让处理用户认证变得简单而灵活。首先,你需要安装 Passport 和相应的策略(比如用于本地用户名/密码认证的 passport-local)。

npm install passport passport-local

接下来,在你的 Express 应用中配置 Passport:

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;

// 使用本地策略
passport.use(new LocalStrategy(
  function(username, password, done) {
    // 这里应该有你的数据库查询逻辑
    if (username === 'test' && password === '123456') {
      return done(null, { id: 1, username: 'test' });
    } else {
      return done(null, false, { message: 'Invalid credentials.' });
    }
  }
));

// 序列化和反序列化用户
passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  // 再次,这里应该是从数据库获取用户信息的逻辑
  done(null, { id: 1, username: 'test' });
});

最后,在路由中使用 Passport:

app.post('/login', 
  passport.authenticate('local', { failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('/');
  });

这样,你就有了一个基本的登录系统!别忘了处理登出和保护路由等其他部分。祝编程愉快!


Passport.js 是一个用于Node.js应用的身份验证中间件,支持多种认证策略。下面我将向您展示如何使用Passport.js来实现基本的用户认证功能,包括设置本地策略(即通过用户名和密码进行认证)。

1. 安装必要的包

首先,确保你的项目中安装了passportpassport-local以及常用的数据库ORM如mongoosesequelize。这里以expressmongoosepassport为例:

npm install express mongoose passport passport-local bcryptjs

bcryptjs 用于密码加密。

2. 设置基本的Express服务器

创建一个简单的Express应用:

const express = require('express');
const bodyParser = require('body-parser');
const session = require('express-session');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const mongoose = require('mongoose');

const app = express();

// 连接MongoDB数据库
mongoose.connect('mongodb://localhost/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true });

// 用户模型定义
const UserSchema = new mongoose.Schema({
    username: String,
    password: String
});

const User = mongoose.model('User', UserSchema);

// Passport初始化
app.use(session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
app.use(passport.session());

// 配置Passport使用Local策略
passport.use(new LocalStrategy(
    function(username, password, done) {
        User.findOne({ username: username }, function(err, user) {
            if (err) { return done(err); }
            if (!user) { return done(null, false, { message: 'Incorrect username.' }); }
            // 使用bcrypt比较密码
            const isValidPassword = require('bcryptjs').compareSync(password, user.password);
            if (isValidPassword) {
                return done(null, user);
            } else {
                return done(null, false, { message: 'Incorrect password.' });
            }
        });
    }
));

passport.serializeUser(function(user, cb) {
    cb(null, user.id);
});

passport.deserializeUser(function(id, cb) {
    User.findById(id, function(err, user) {
        cb(err, user);
    });
});

// 登录路由
app.post('/login', 
    passport.authenticate('local', { successRedirect: '/',
                                     failureRedirect: '/login',
                                     failureFlash: false })
);

app.listen(3000);

这段代码中,我们首先配置了Express应用,然后定义了一个简单的用户模型,并使用mongoose连接到MongoDB数据库。接着,我们设置了passport的本地认证策略,并实现了登录逻辑。

3. 创建用户并测试登录

你可以使用mongoose的方法创建新用户,例如:

const newUser = new User({ username: 'test', password: require('bcryptjs').hashSync('password', 8) });
newUser.save();

运行服务器后,你可以尝试访问/login页面,使用上述创建的用户信息进行登录测试。

这就是使用Passport.js在Node.js中实现基本的用户认证流程。希望这对你有所帮助!

Passport.js 是一个简洁的 Node.js 认证中间件,支持多种策略(如本地、OAuth、JWT等)。使用时,首先安装 passport 和相应策略,例如 npm install passport passport-local。然后配置 Passport 使用所选策略,例如:

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;

passport.use(new LocalStrategy(
  function(username, password, done) {
    // 验证逻辑
  }
));

序列化和反序列化用户以管理会话:

passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  // 根据id获取用户信息
});

最后,在路由中应用 Passport 中间件进行身份验证。

回到顶部