Nodejs Express结合Passport实现登陆认证

Nodejs Express结合Passport实现登陆认证

alt Express结合Passport实现登陆认证

前言:

登陆认证,是每个应用都需要的基础功能。但很多的时候,却都被大家所忽略,不仅安全漏洞严重,而且代码紧耦合,混乱不堪。

Passport项目,正是为了解决登陆认证的事情,让认证模块更透明,减少耦合!

文章目录:

  • 什么是认证(Authentication)?
  • Passport项目介绍
  • Express结合Passport实现登陆认证

请查看博客文章

http://blog.fens.me/nodejs-express-passport/


2 回复

Nodejs Express 结合 Passport 实现登录认证

前言:

登录认证是每个Web应用不可或缺的一部分。然而,许多开发者常常忽视这一点,导致安全漏洞频出,并且代码的耦合度很高。Passport 是一个专为Node.js设计的认证中间件,它提供了一种简洁的方式来处理用户认证,使得认证逻辑更加透明,减少了代码的耦合。

文章目录:

  • 什么是认证(Authentication)?
  • Passport项目介绍
  • Express结合Passport实现登录认证

什么是认证(Authentication)?

认证是指验证用户身份的过程。通常包括用户名和密码的验证。通过认证后,用户可以访问受保护的资源。

Passport项目介绍

Passport 是一个用于Node.js应用的身份验证框架。它提供了多种策略(Strategies),如本地认证、OAuth、JWT等,来支持不同的认证方式。Passport的核心理念是“无入侵”,即认证逻辑不应该侵入到业务逻辑中。

Express结合Passport实现登录认证

下面我们将通过一个简单的例子来展示如何使用Express和Passport实现用户登录认证。

步骤1: 安装依赖

首先,你需要安装必要的依赖包:

npm install express passport passport-local mongoose body-parser express-session
步骤2: 创建基本的Express应用

创建一个基本的Express应用结构:

// app.js
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 app = express();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(session({
  secret: 'your_secret_key',
  resave: false,
  saveUninitialized: false
}));

app.use(passport.initialize());
app.use(passport.session());

// 用户模型
const User = require('./models/User');

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); }
      if (user.password !== password) { return done(null, false); }
      return done(null, user);
    });
  }
));

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

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

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

app.listen(3000, () => console.log('Server running on port 3000'));
步骤3: 创建用户模型

创建一个简单的用户模型(models/User.js):

// models/User.js
const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
  username: String,
  password: String
});

module.exports = mongoose.model('User', userSchema);
步骤4: 创建登录页面

创建一个简单的登录页面(views/login.ejs):

<!DOCTYPE html>
<html>
<head>
  <title>Login</title>
</head>
<body>
  <form action="/login" method="post">
    <label for="username">Username:</label>
    <input type="text" id="username" name="username"><br>
    <label for="password">Password:</label>
    <input type="password" id="password" name="password"><br>
    <button type="submit">Login</button>
  </form>
</body>
</html>
步骤5: 启动应用

启动你的Express应用:

node app.js

现在你可以访问 http://localhost:3000 并尝试登录了。


以上就是一个简单的示例,展示了如何使用Express和Passport实现用户登录认证。希望这对你有所帮助!


Nodejs Express结合Passport实现登录认证

前言:

登录认证是每个Web应用都必不可少的功能之一。但是,如果处理不当,可能会引入严重的安全漏洞,并且导致代码紧耦合、难以维护。Passport 是一个专门用于处理认证的中间件,它可以帮助我们更清晰地分离认证逻辑,使得应用更加整洁。

文章目录:

  • 什么是认证(Authentication)?
  • Passport项目介绍
  • Express结合Passport实现登录认证

认证(Authentication)

认证是指验证用户身份的过程。通常涉及到用户名和密码的匹配。成功认证后,用户可以访问受保护的资源。

Passport项目介绍

Passport 是一个灵活的中间件,用于Node.js中的认证系统。它支持多种认证策略(如本地认证、OAuth等),并且可以通过简单的配置来集成到任何Express应用中。

Express结合Passport实现登录认证

以下是一个简单的示例,演示如何使用Express和Passport来实现基本的登录认证功能。

首先,确保安装了必要的依赖包:

npm install express passport passport-local express-session

接下来是核心代码:

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

// 初始化Express应用
const app = express();

// 配置session
app.use(session({
    secret: 'secret',
    resave: false,
    saveUninitialized: false
}));

// 初始化Passport并序列化/反序列化用户
passport.use(new LocalStrategy(
    function(username, password, done) {
        if (username === 'admin' && password === 'password') {
            return done(null, { id: 1, username: 'admin' });
        }
        return done(null, false);
    }
));

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

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

app.use(passport.initialize());
app.use(passport.session());

// 路由定义
app.post('/login', 
    passport.authenticate('local', {
        successRedirect: '/',
        failureRedirect: '/login'
    })
);

app.get('/', (req, res) => {
    if (req.isAuthenticated()) {
        res.send(`Hello ${req.user.username}`);
    } else {
        res.redirect('/login');
    }
});

app.listen(3000);

总结

通过上述代码,我们可以看到如何使用Express和Passport来创建一个简单的登录系统。使用LocalStrategy来进行用户名和密码的验证,而serializeUserdeserializeUser则负责将用户信息存储到会话中。这种方式使得认证逻辑与业务逻辑分离,代码更加模块化和可维护。

你可以参考上面的代码,根据实际需求进行调整和扩展。

回到顶部