Node.js 解释护照
护照是一种非常容易集成的NodeJs包,用于向我们的网站或Web应用程序添加认证功能。
为了展示在Nodejs中使用护照,我们首先创建一个非常简单的Node应用程序。
使用express创建一个简单的Node应用程序:
步骤1: 创建一个新文件夹(我将文件夹命名为“NODEAPP”),在其中创建一个名为“Server.js”的新文件。
步骤2: 使用命令“npm init -y”初始化npm。Package.json文件将添加到你的项目文件夹中。
npm init-y
步骤3: 安装所有必要的包,例如, express , body-parser (稍后用于提取 HTML 表单数据), mongoose (用于连接到我们的 MongoDB 数据库),使用以下命令:
执行上面的命令后,将会向你的项目结构中添加一个名为“ package-lock.json ”的文件,以及一个名为“ node_modules ”的文件夹。
项目结构: 最终的项目结构应该如下所示:
步骤4: 在我们的 Server.js 文件中添加基本代码。
Server.js
步骤5: 您还可以通过打开浏览器并键入 http://localhost:3000 来进行检查。您应该看到一个带有以下响应的空白页面。
步骤6: 为我们的网站添加身份验证。为我们的网站添加身份验证功能的一种简单方法是从用户获取电子邮件和密码输入,并直接将它们保存在数据库中。类似地,当用户想要登录时,要求输入他/她的电子邮件和密码,如果有任何记录与输入的电子邮件和密码匹配,则用户是合法的,登录成功。
Server.js
Index.html
login.html
但是使用这种简单的身份验证方法有一些限制。
- 用户在注册过程中输入的密码 对所有人都暴露在数据库中 ,也就是说,任何可以访问数据库的组织内成员都可以看到任何用户的密码。但是,密码不能被暴露,我们需要 强大的加密 来安全存储密码在数据库中。
- 每次(可能每天20-25次甚至更多)我们想使用这个网络应用程序或网站时,都需要重新输入我们的电子邮件和密码,这非常耗时。
- 我们无法使用这个简单的身份验证代码添加社交网络登录功能。
Passport为我们消除了所有这些限制。如果使用Passport:
- 我们不必暴露密码。整个加密和解密过程由Passport完成,包括密码的哈希和加密。
- Passport允许我们创建和维护会话。例如,当你访问任何社交媒体网站或移动应用时,你不必每次想使用Instagram或Facebook时都要重新登录。相反,信息会被保存,这意味着你不必每次想使用网站时都要登录。技术上来说,一个会话已经创建,并将在接下来的几天、几周或几个月内维护。
- Passport还允许我们轻松集成使用Google、Facebook、LinkedIn和其他各种社交网络服务的身份验证。
步骤7: 为了使用Passport,我们必须安装4个npm包,分别是“passport”、“passport-local”、“passport-local-mongoose”和“express-session”(确保你下载的是“express-session”而不是“express-sessions”)。
在命令行中,写入以下命令来安装这四个包:
npm install passport passport-local passport-local-mongoose express-session
安装完成后,您需要在 Server.js 文件的顶部添加以下代码以包括护照模块。
Server.js
步骤8: 初始化Passport和启动会话。要初始化Passport和启动会话,请在会话声明代码的下方编写以下代码。
Server.js
步骤9: 现在,即使我们关闭浏览器窗口,我们也希望我们能保持登录一段时间,也就是说,我们希望建立一个会话。会话使用 Cookie 来存储数据和消息,并允许服务器向用户提供正确的会话数据。创建Cookie并将消息存储到其中的过程:将Cookie序列化为消息以及从Cookie中提取消息的过程,以便向用户提供正确的数据:
Server.js
步骤10: 现在,我们已经准备好为我们的网站添加身份验证。 我们已经安装了必需的软件包,配置了会话,初始化了Passport和会话,并告诉Passport使用和管理cookie。
处理get请求:
Server.js
步骤11: 现在,在注册路由中,我们需要添加简单的代码,以便允许我们注册任何新用户。
Server.js
而且类似的代码是用来处理登录请求的。下面是处理/login路由上的POST请求的代码。(login.html文件将与之前的身份验证方法中使用的相同)
Server.js
只需要安装所有的软件包,编写下面的代码,启动服务器(使用“node server.js/node app.js”命令),然后您就可以使用Passport来进行用户认证。
Index.html
login.html
server.js
使用这段代码,并使用Passport进行身份验证,我们解决了三个主要问题:
- 一旦我们登录,就会创建一个会话。这意味着每当我们再次打开网站时,就不需要再次登录。 Cookie将存储在浏览器中(当您第一次登录时),并且在您再次回来时将被使用。(req.isAuthenticated()用于检查会话是否已经运行)。
- 我们的用户密码是安全的。它们不会在我们的数据库中暴露。我们已经将所有的加密/解密任务委托给了Passport,就是这样。
- 我们可以看到,现在没有“password”这一栏。我们的密码是由Passport加密的。每当需要用于登录目的时,Passport可以再次解密密码并使用它们。
- 我们还可以使用Passport仅添加使用Google、Facebook、LinkedIn和其他各种社交网络服务的身份验证。(我们在这里没有讨论,但代码类似于此)
输出: