passport.js是Nodejs中的一个做登录验证的中间件,极其灵活和模块化,并且可与Express等Web框架无缝集成。Passport功能单一,即只能做登录验证,但非常强大,支持本地账号验证和第三方账号登录验证(OAuth和OpenID等),支持大多数Web网站和服务。
首先你需要Nodejs,然后数据库用来存储用户数据;另外passport作为中间件,需要依赖Express和Connect.
具体的依赖有:
Express:web框架。或其他支持的框架。
Connect:中间件框架。
cookie-parser:Connect的cookie解析中间件。
express-session:Connect的session解析中间件,依赖于cookie-parser。
express-flash:express的消息提示中间件,可选,但一般情况下都需要装。
你最少需要安装一个passport策略来使用它,一般而言本地验证策略passport-local是必装的。
npm install passport npm install passport-local var express = require('express'); var cookieParser = require('cookie-parser'); var session = require('express-session'); var flash = require('express-flash'); var passport = require('passport'); ... app.use(cookieParser()); app.use(session({...})); app.use(passport.initialize()); app.use(passport.session()); app.use(flash())
var passport = require('passport') , 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, { message: '用户名不存在.' }); } if (!user.validPassword(password)) { return done(null, false, { message: '密码不匹配.' }); } return done(null, user); }); } ));
这里用的是mongodb数据库。
验证回调需要返回验证结果,这是由done()来完成的。
在passport.use()里面,done()有三种用法:
当发生系统级异常时,返回done(err),这里是数据库查询出错,一般用next(err),但这里用done(err),两者的效果相同,都是返回error信息;
当验证不通过时,返回done(null, false, message),这里的message是可选的,可通过express-flash调用;
当验证通过时,返回done(null, user)。
上面的代码里是user.validPassword(password)方法,这并不是passport添加的,而是需要用户自定义。
一般对密码进行哈希和盐化的Nodejs模块是bcrypt,它提供一个compare方法来验证密码,如何使用它则超出本文的范围,这里就不讲了。
session序列化与反序列化
验证用户提交的凭证是否正确,是与session中储存的对象进行对比,所以涉及到从session中存取数据,需要做session对象序列化与反序列化。调用代码如下:
passport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); });
这里第一段代码是将环境中的user.id序列化到session中,即sessionID,同时它将作为凭证存储在用户cookie中。
第二段代码是从session反序列化,参数为用户提交的sessionID,若存在则从数据库中查询user并存储与req.user中。
我所讲述的passport.js 只是一小部分,详情请看:http://idlelife.org/archives/808
相关推荐
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript编写程序。这个"NodeJsProject.zip"文件包含了一个使用Node.js原生代码实现的小型项目,项目可能涵盖了数据库操作、用户...
`nodejs-passport` 示例应用程序演示了如何在 Express.js 应用中使用 Passport.js 实现用户身份验证和授权。通过迁移至 Express 4,你可以利用其最新特性和改进,提高应用的性能和稳定性。了解并掌握 Passport.js 的...
"soybean-admin的后端服务nodejs版.zip" 是一个包含Node.js实现的后端服务项目的压缩包。该项目可能是一个用于管理 Soybean(可能是一个农业、食品或数据分析相关的项目)的后台管理系统。NestJS是选用的框架,它是...
4. **安全实践**:如JWT(JSON Web Tokens)用于身份验证, Passport.js处理用户认证。 5. **部署与优化**:使用Nginx反向代理,负载均衡,提升应用性能。 在压缩包文件名"ttms"中,具体信息未知,可能是项目名称、...
在本项目"nodejs_passport_sample"中,我们探索了一个基于Node.js和Express.js 4.0构建的应用程序,该应用程序集成了流行的`passport.js`库进行用户身份验证。这个模板是一个很好的起点,用于理解如何在Node.js环境...
理解Passport.js的工作流程关于Passport.jsPassport.js是Nodejs一个做登录注册的中间件,支持本地验证和第三方账号的登录验证(支持绝大部分社交网站)。组成部分passport.initialize(): 每次请求到来时触发,保证...
passport-oauth2, 用于 Passport 和 node.js的OAuth 2.0认证策略 passport-oauth2 通用 OAuth 2.0认证策略用于 Passport 。这个模块允许你在 node.js 应用程序中使用 OAuth 2.0进行身份验证。 通过插入 Passport,...
在本文中,我们将深入探讨如何使用Node.js、Passport.js和Mongoose构建一个全面的身份验证系统。Passport.js是一个强大的身份验证中间件,而Mongoose是用于MongoDB数据库的流行对象模型工具。让我们逐步了解如何将...
标题中的“NodeJs_PassportJs”指的是使用Node.js平台上的Passport.js库来实现用户登录和身份验证功能。Passport.js是一个灵活的身份验证中间件,适用于Express.js和其他基于Connect的web应用框架。它提供了多种身份...
演示如何使用 Passport.js 库通过 Azure AD B2C 保护 Node.js Web API 的示例 概述 此示例演示使用库通过Microsoft 标识平台和Azure AD B2C 保护Node.js Web API 。 您将需要一个客户端应用程序来调用 Web API。 ...
:link: 安装将Passport.js应用程序与Magic集成将需要我们的服务器端NPM软件包: # Via NPM:npm install --save passport-magic# Via Yarn:yarn add passport-magic :high_voltage: 快速开始 const passport = ...
在本项目"blog多人社区项目nodejs.zip"中,我们可以看到一个基于JavaScript(JS)的多人社区应用。这个项目很可能使用了Node.js作为后端服务器平台,因为Node.js是JavaScript的一个强大后端框架,允许开发者使用...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程。在 Node.js 中,用户权限管理框架是构建安全、高效Web应用的重要组成部分,用于控制不同用户对应用...
passport-http-bearer, 面向 Passport 和 node.js的HTTP承载认证策略 passport-http-bearer 基于HTTP承载认证策略的 Passport 。这个模块允许你使用 RFC 6750插件指定的承载令牌,在你的应用程序中对HTTP请求进行...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行开发。这个 "NodeJS_GlobalArtifacts.zip" 压缩包包含了一些非常有用的模块,这些模块极大地扩展了 Node....
在实际项目中,为了实现密码可审计的VM服务,开发者可能还需要集成其他组件,如日志服务(如Winston或Bunyan)来记录操作,以及认证和授权框架(如Passport.js)来控制用户访问权限。此外,可能还需要考虑防止SQL...
Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它让开发者能够在服务器端使用JavaScript编写代码,极大地推动了前后端同栈开发的潮流。Fastify是一个高性能的Node.js web和API框架,它的设计目标是减少开销...
ExpressJS 4入门版 使用ExpressJS 4,MongoDB / Mongoose,使用Passport.js进行身份验证,Jade和GruntJS作为任务自动化的轻量级Bootstrap NodeJS应用程序构建安装先决条件Node.js-使用下载并安装Node.js(节点版本...
在JavaScript的世界里,Node.js作为一个强大的服务器端运行环境,提供了丰富的工具和库来帮助开发者构建高效的应用程序。在Web开发中,身份验证是不可或缺的一部分,它确保了只有授权的用户才能访问特定的资源。本...
(Next.js :red_heart: MongoDB) :plus: Passport.js 使用 , 和构建的身份验证应用 :rainbow: 放一个 :star: 如果你喜欢 特征 :check_mark: 没有Express.js :check_mark: 无服务器就绪 :check_mark: API路由 :...