使用 Node.js 和 MongoDB 的登录表单
按照这些简单的步骤学习如何使用 Node.js 和 MongoDB 创建登录表单。登录表单允许用户在使用注册表单创建帐户后登录网站。
模块安装:
$ npm install ejs
嵌入式 JavaScript 允许您使用纯 JavaScript 生成 HTML 标记。
$ npm install express --save
Express 是 Node 的一个模块框架,可用于应用程序。
$ npm install mongoose
Mongoose 是一个用于 MongoDB 和 Node.js 的对象数据建模 (ODM) 库。它管理数据之间的关系,提供模式验证,并用于在代码中的对象和 MongoDB 中这些对象的表示之间进行转换。
$ npm install body-parser --save
正文解析器允许 express 读取正文,然后将其解析为我们可以理解的 JSON 对象。
npm install express-session --save
Express.js 使用 cookie 来存储会话 ID。
npm install passport passport-local --save
npm install passport-local-mongoose --save
- Passport 是 Node.js 的身份验证中间件。 js。 Passport 极其灵活和模块化,可以不显眼地放入任何基于 Express 的 Web 应用程序中。一套全面的策略支持使用用户名和密码、Facebook、Twitter 等进行身份验证。
文件名:app.js
javascript
var express = require("express"),
mongoose = require("mongoose"),
passport = require("passport"),
bodyParser = require("body-parser"),
LocalStrategy = require("passport-local"),
passportLocalMongoose =
require("passport-local-mongoose"),
User = require("./models/user");
mongoose.set('useNewUrlParser', true);
mongoose.set('useFindAndModify', false);
mongoose.set('useCreateIndex', true);
mongoose.set('useUnifiedTopology', true);
mongoose.connect("mongodb://localhost/auth_demo_app");
var app = express();
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({ extended: true }));
app.use(require("express-session")({
secret: "Rusty is a dog",
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
//=====================
// ROUTES
//=====================
// Showing home page
app.get("/", function (req, res) {
res.render("home");
});
// Showing secret page
app.get("/secret", isLoggedIn, function (req, res) {
res.render("secret");
});
// Showing register form
app.get("/register", function (req, res) {
res.render("register");
});
// Handling user signup
app.post("/register", function (req, res) {
var username = req.body.username
var password = req.body.password
User.register(new User({ username: username }),
password, function (err, user) {
if (err) {
console.log(err);
return res.render("register");
}
passport.authenticate("local")(
req, res, function () {
res.render("secret");
});
});
});
//Showing login form
app.get("/login", function (req, res) {
res.render("login");
});
//Handling user login
app.post("/login", passport.authenticate("local", {
successRedirect: "/secret",
failureRedirect: "/login"
}), function (req, res) {
});
//Handling user logout
app.get("/logout", function (req, res) {
req.logout();
res.redirect("/");
});
function isLoggedIn(req, res, next) {
if (req.isAuthenticated()) return next();
res.redirect("/login");
}
var port = process.env.PORT || 3000;
app.listen(port, function () {
console.log("Server Has Started!");
});
html
html
html
html
文件名:home.ejs
文件名:login.ejs
文件名:register.ejs
文件名:secret.ejs
运行程序的步骤:
- 项目结构将如下所示:
- views 目录的内容如下所示:
- 运行 npm init 以初始化 .json 文件后,将创建 Rest 文件。
- 使用以下命令运行 index.js 文件:
nodemon app.js
- 或者,如果您没有安装 nodemon,您可以运行:
node app.js
- 现在转到您的浏览器并输入以下 URL:
http://localhost:3000/
- 首先,您需要注册,然后只有您才能登录该应用程序。
- 现在您已经成功注册,现在这是登录表单,如下所示:
- 此登录表单将带您进入 Secret 页面,如下所示:
这就是你如何使用 Node.js 和 MongoDB 创建登录表单的方法。