Nodejs Express结合Passport实现登陆认证
Nodejs Express结合Passport实现登陆认证
前言:
登陆认证,是每个应用都需要的基础功能。但很多的时候,却都被大家所忽略,不仅安全漏洞严重,而且代码紧耦合,混乱不堪。
Passport项目,正是为了解决登陆认证的事情,让认证模块更透明,减少耦合!
文章目录:
- 什么是认证(Authentication)?
- Passport项目介绍
- Express结合Passport实现登陆认证
请查看博客文章
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
来进行用户名和密码的验证,而serializeUser
和deserializeUser
则负责将用户信息存储到会话中。这种方式使得认证逻辑与业务逻辑分离,代码更加模块化和可维护。
你可以参考上面的代码,根据实际需求进行调整和扩展。