在开发 Web 应用程序时,用户认证是一个必不可少的功能。Passport 是一个 Node.js 库,可以用于实现各种认证策略,包括本地认证、OAuth 以及 OpenID 等。在本文中,我们将介绍如何在 Express.js 应用程序中使用 Passport-Local 进行本地认证。
安装 Passport-Local
在开始之前,我们需要安装 Passport 和 Passport-Local。可以通过以下命令安装:
npm install passport passport-local
配置 Passport-Local
在应用程序中使用 Passport-Local 进行本地认证,需要进行以下配置:
- 导入 Passport 和 Passport-Local:
const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy;
- 配置 Passport-Local 策略:
passport.use(new LocalStrategy({ usernameField: 'email', // 指定用户名字段 passwordField: 'password' // 指定密码字段 }, (email, password, done) => { // 在此处验证用户名和密码 }));
在上述代码中,我们使用 LocalStrategy
构造函数创建一个本地策略。usernameField
和 passwordField
属性用于指定用户名和密码字段的名称。在本地策略的回调函数中,我们可以使用提供的用户名和密码验证用户的身份。
- 序列化和反序列化用户对象:
passport.serializeUser((user, done) => { done(null, user.id); }); passport.deserializeUser((id, done) => { // 在此处查询用户对象并传递给 done 回调函数 });
在上述代码中,我们使用 serializeUser
和 deserializeUser
方法对用户对象进行序列化和反序列化。序列化用户对象将其转换为标识符,反序列化则将标识符转换为用户对象。
配置 Express.js 应用程序
在配置 Passport-Local 后,我们需要将其集成到 Express.js 应用程序中。以下是实现此目标的步骤:
- 导入 Passport 和 Passport-Local:
const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy;
- 配置 Express.js 应用程序:
const express = require('express'); const app = express(); app.use(express.urlencoded({ extended: true })); app.use(express.json()); app.use(passport.initialize()); app.use(passport.session());
在上述代码中,我们使用 express
模块创建了一个 Express.js 应用程序,并配置了 urlencoded
和 json
中间件,以便从请求正文中解析数据。我们还使用 passport.initialize()
和 passport.session()
中间件来初始化 Passport 和启用会话支持。
- 配置路由:
app.post('/login', passport.authenticate('local', { successRedirect: '/dashboard', failureRedirect: '/login' }));
在上述代码中,我们配置了一个 /login
路由,该路由使用 Passport-Local 策略进行身份验证。如果身份验证成功,则用户将重定向到 /dashboard
路由,否则将重定向到 /login
路由。
示例代码
以下是一个完整的 Express.js 应用程序,其中使用 Passport-Local 进行本地认证:
// javascriptcn.com 代码示例 const express = require('express'); const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy; const app = express(); app.use(express.urlencoded({ extended: true })); app.use(express.json()); app.use(passport.initialize()); app.use(passport.session()); passport.use(new LocalStrategy({ usernameField: 'email', passwordField: 'password' }, (email, password, done) => { if (email === 'user@example.com' && password === 'password') { return done(null, { id: 1, email: 'user@example.com' }); } return done(null, false); })); passport.serializeUser((user, done) => { done(null, user.id); }); passport.deserializeUser((id, done) => { if (id === 1) { return done(null, { id: 1, email: 'user@example.com' }); } return done(null, null); }); app.post('/login', passport.authenticate('local', { successRedirect: '/dashboard', failureRedirect: '/login' })); app.get('/dashboard', (req, res) => { if (req.isAuthenticated()) { res.send(`Welcome, ${req.user.email}!`); } else { res.redirect('/login'); } }); app.get('/login', (req, res) => { res.send(` <form method="post" action="/login"> <label>Email:</label> <input type="email" name="email" required> <label>Password:</label> <input type="password" name="password" required> <button type="submit">Login</button> </form> `); }); app.listen(3000, () => { console.log('Server started'); });
在上述代码中,我们创建了一个 /dashboard
路由,用于显示欢迎信息。我们还创建了一个 /login
路由,用于显示登录表单。当用户提交登录表单时,Passport-Local 策略将使用提供的用户名和密码进行身份验证。如果身份验证成功,则用户将重定向到 /dashboard
路由,否则将重定向到 /login
路由。
总结
在本文中,我们介绍了如何在 Express.js 应用程序中使用 Passport-Local 进行本地认证。我们首先安装了 Passport 和 Passport-Local,并配置了 Passport-Local 策略。然后,我们将 Passport-Local 集成到 Express.js 应用程序中,并配置了路由。最后,我们提供了一个示例应用程序,以帮助读者更好地理解如何使用 Passport-Local 进行本地认证。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653b5d9a7d4982a6eb5b4a10