Node.js 中使用 Passport-Local 实现本地认证

在 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 两个模块:

接着需要在代码中引入这两个模块:

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


纠错
反馈