在 Web 开发中,用户认证是一个非常重要的问题。Node.js 中有许多认证库,其中 Passport 是最流行的一个。Passport 提供了一系列的认证策略(Strategy),其中包括本地认证策略(Local Strategy)。本文将介绍如何在 Node.js 中使用 Passport-Local 实现本地认证。
什么是 Passport-Local
Passport-Local 是 Passport 的一个认证策略,用于实现本地用户名和密码的认证。它使用了一个叫做 LocalStrategy 的类来实现认证逻辑。LocalStrategy 的构造函数需要传入一个 verify 函数,这个函数用于验证用户名和密码是否正确。
如何使用 Passport-Local
使用 Passport-Local 首先需要安装 passport 和 passport-local 两个模块:
npm install passport passport-local
接着需要在代码中引入这两个模块:
const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy;
接下来定义一个 verify 函数,用于验证用户名和密码是否正确。verify 函数接收两个参数,分别是用户名和密码。如果用户名和密码正确,verify 函数需要调用 done 函数并传入一个用户对象。如果用户名或密码不正确,verify 函数需要调用 done 函数并传入 false。
function verify(username, password, done) { if (username === 'admin' && password === 'password') { done(null, { id: '1', username: 'admin' }); } else { done(null, false); } }
接着创建一个 LocalStrategy 的实例,传入 verify 函数作为参数。
const localStrategy = new LocalStrategy(verify);
然后将 LocalStrategy 实例传给 passport 的 use 方法,用于注册本地认证策略。
passport.use(localStrategy);
最后,在需要进行认证的路由中,调用 passport 的 authenticate 方法,并传入 local 参数,即可使用本地认证策略进行认证。
app.post('/login', passport.authenticate('local'), (req, res) => { res.send('登录成功'); });
示例代码
下面是一个完整的示例代码,演示了如何使用 Passport-Local 进行本地认证。
const express = require('express'); const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy; const app = express(); function verify(username, password, done) { if (username === 'admin' && password === 'password') { done(null, { id: '1', username: 'admin' }); } else { done(null, false); } } const localStrategy = new LocalStrategy(verify); passport.use(localStrategy); app.use(express.urlencoded({ extended: true })); app.use(passport.initialize()); app.use(passport.session()); passport.serializeUser((user, done) => { done(null, user.id); }); passport.deserializeUser((id, done) => { done(null, { id: '1', username: 'admin' }); }); app.get('/', (req, res) => { res.send('首页'); }); app.post('/login', passport.authenticate('local'), (req, res) => { res.send('登录成功'); }); app.listen(3000, () => { console.log('服务器已启动'); });
总结
本文介绍了如何在 Node.js 中使用 Passport-Local 实现本地认证。使用 Passport-Local 需要定义 verify 函数,创建 LocalStrategy 实例,注册本地认证策略,以及在需要进行认证的路由中调用 authenticate 方法。Passport-Local 的使用相对简单,但是可以通过自定义 verify 函数实现更复杂的认证逻辑。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658aaabceb4cecbf2dfe918a