📜  使用 Node.js 和 MongoDB 的登录表单

📅  最后修改于: 2022-05-13 01:56:51.003000             🧑  作者: Mango

使用 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

This is home page

 
  • Sign up!!
  • Login
  • Logout


  • html

    login

     
                  
     

    This is home page

     
  • Sign up!!
  • Login
  • Logout


  • html

    Sign up form

     
                  
     

    This is home page

     
  • Sign up!!
  • Login
  • Logout


  • html

    This is secrect page

       

    This is home page

     
  • Sign up!!
  • Login
  • Logout


  • 文件名:home.ejs

    html

    This is home page

     
  • Sign up!!
  • Login
  • Logout
  • 文件名:login.ejs

    html

    login

     
                  
     

    This is home page

     
  • Sign up!!
  • Login
  • Logout
  • 文件名:register.ejs

    html

    Sign up form

     
                  
     

    This is home page

     
  • Sign up!!
  • Login
  • Logout
  • 文件名:secret.ejs

    html

    This is secrect page

       

    This is home page

     
  • Sign up!!
  • Login
  • Logout
  • 运行程序的步骤:

    • 项目结构将如下所示:

    • views 目录的内容如下所示:

    • 运行 npm init 以初始化 .json 文件后,将创建 Rest 文件。
    • 使用以下命令运行 index.js 文件:
    nodemon app.js
    • 或者,如果您没有安装 nodemon,您可以运行:
    node app.js

    • 现在转到您的浏览器并输入以下 URL:
    http://localhost:3000/

    • 首先,您需要注册,然后只有您才能登录该应用程序。

    • 现在您已经成功注册,现在这是登录表单,如下所示:

    • 此登录表单将带您进入 Secret 页面,如下所示:

    这就是你如何使用 Node.js 和 MongoDB 创建登录表单的方法。