简介
在网站或应用程序中,身份验证是一个必不可少的功能。Node.js 中,我们可以使用 passport 进行身份验证。Passport 是一个 Node.js 身份验证中间件,它实现了一个简单而稳定的身份验证框架,支持多种身份验证策略,包括本地身份验证、OAuth、OpenID 等。
本文将介绍如何使用 passport 进行身份验证,包括配置与安装、创建本地身份验证策略、使用第三方身份验证策略等,更加详细和深入地探讨了 passport 的相关知识点,旨在对前端工程师加深 passport 的理解,提高实际开发的效率和质量。
配置与安装
使用 passport 前,需要先安装它。在命令行中输入以下命令即可:
npm install passport --save
如果需要使用特定的身份验证策略,则需要额外安装。比如我们要使用本地身份验证策略,则需要安装 passport-local:
npm install passport-local --save
在应用程序中使用 passport 时,需要先引入它并配置 session 和 cookie:
// www.javascriptcn.com code example
const passport = require('passport');
const session = require('express-session');
const cookieParser = require('cookie-parser');
app.use(cookieParser());
app.use(session({
secret: 'my_secret_key',
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());创建本地身份验证策略
passport 提供了多种身份验证策略,其中最基本的一个是本地身份验证策略。下面我们就来进行本地身份验证策略的创建:
// www.javascriptcn.com code example
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
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.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));代码中的 LocalStrategy 是 passport 本地身份验证策略的实现。其中的回调函数将接收从表单提交的用户名和密码,并在其中通过数据库或其他数据源中查找用户进行用户验证。
验证成功时,该回调函数将调用 done 函数,并将用户对象以及任何可能的错误信息或附加数据传递给它。如果验证失败,则可以返回错误信息或 false。
使用本地身份验证策略
接下来,我们将使用创建好的本地身份验证策略进行身份验证。
在 Express 应用程序中,Passport 负责验证身份。我们可以定义路由,当用户在表单中输入用户名和密码时,将它们提交到 /login 路由上。
app.post('/login', passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login'
}));其中第一个参数 'local' 是验证策略的名称,将被用于选择具体的验证策略。如果验证成功,则将用户重定向到主页 / 上。如果验证不成功,则将用户重定向到 /login 页面,可以在该页面上显示错误信息。
接下来,我们可以为每个页面创建中间件,以确保用户已经通过身份验证:
// www.javascriptcn.com code example
function requireAuthentication(req, res, next) {
if (req.isAuthenticated()) {
return next();
} else {
res.redirect('/login');
}
}
app.get('/', requireAuthentication, function(req, res) {
res.render('home', { user: req.user });
});
app.get('/profile', requireAuthentication, function(req, res) {
res.render('profile', { user: req.user });
});其中 req.isAuthenticated() 是 passport 提供的方法,用于验证用户是否已通过身份验证。
使用第三方身份验证策略
除了本地身份验证策略外,passport 还支持多种第三方身份验证策略,包括 Facebook、Twitter、Google 等。
使用第三方身份验证策略的步骤大致相同。首先,需要安装相应的策略,比如如果我们要使用 Facebook 身份验证策略,则需要安装 passport-facebook:
npm install passport-facebook --save
然后,需要进行配置。以下示例代码展示了连接应用程序和 Facebook 的配置代码:
// www.javascriptcn.com code example
passport.use(new FacebookStrategy({
clientID: FACEBOOK_APP_ID,
clientSecret: FACEBOOK_APP_SECRET,
callbackURL: "http://localhost:3000/auth/facebook/callback"
},
function(accessToken, refreshToken, profile, done) {
User.findOrCreate({ facebookId: profile.id }, function (err, user) {
return done(err, user);
});
}
));
app.get('/auth/facebook', passport.authenticate('facebook'));
app.get('/auth/facebook/callback',
passport.authenticate('facebook', { successRedirect: '/home',
failureRedirect: '/login' }));在这个例子里,我们使用了 FacebookStrategy 身份验证策略来处理与 Facebook 的身份验证交互。FacebookStrategy 需要指定客户端 ID 和客户端密钥,这些信息可以在 Facebook 开发者门户中获得。
当用户点击链接进行身份验证时,将调用 passport.authenticate('facebook')。passport 将重定向用户到 Facebook,在授权后,Facebook 将重定向回应用程序的回调 URL。在应用程序中定义的 /auth/facebook/callback 路由上处理 Facebook 的回调。
FacebookStrategy 在回调中接收 Facebook 的访问令牌(access token),用于访问用户数据。它还接收 profile 对象,其中包含关于用户的所有信息。
在此,我们展示了生成本地和第三方身份验证策略的代码和使用方法。passport 是 Node.js 身份验证框架中的佼佼者。这篇文章的内容旨在帮助前端工程师加深 passport 的理解,能够更好地进行前后端联调,提高实际开发的效率和质量。
到这里,文章就结束了,希望大家学有所得,也欢迎大家在评论区留言发表看法和建议。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67cfae7ae46428fe9eb7e1d0