簡體   English   中英

Node.js 和 MongoDB 中的登錄表單(貓鼬)

[英]Login Form in Node.js & MongoDB (mongoose)

我幾乎是 web 開發人員的初學者。 我正在為登錄身份驗證制作一個非常基本的 web 頁面。 我想要做的就是從數據庫 (mongoose) 檢查我的 LoginPage 上的用戶憑據(用戶名和密碼),如果它們是正確的,則重定向到下一頁 (MainPage)。

登錄.ejs (.html) 文件

<html>    
    <head>
        <title>Login</title>
    </head>    
    <body>    
        <form id="form_Login" action="/MainPage" method="post">
            <input id="txt_username" type="text" required>
            <br><input id="txt_password" type="password" required>              
            <br><input type="submit" value="Login">
        </form>    
    </body>    
</html>

應用程序.js 文件

var express = require('express');
var app = express();    
var mongoose = require('mongoose');
var Schema = mongoose.Schema;    
var User = new Schema ({
    username : String,
    password : String
});

mongoose.model('User',User);
mongoose.connect('mongodb://localhost:27017/MyDB');

app.set('view engine', 'ejs');

app.get('/',function(req, res) {
    res.render('LoginPage');
});

app.get('/MainPage',function(req, res) {
    res.render('MainPage');
});

app.post('/MainPage', function(req, res) {
    // new code should come over here
    res.redirect('/MainPage');
});

app.get('*', function(req, res) {
    res.send('Bad Route!');
});

var server = app.listen(3000, function() {
    console.log('listening on port 3000.');
});

任何幫助,將不勝感激。

我建議您為此使用passport.js庫。 它不僅為您提供了一種創建本地身份驗證的好方法,還可以稍后集成google,facebook和twitter(或任何oAuth)社交身份驗證方法。

您可以閱讀應該為您提供一個良好起點的文檔,或者以下任一示例:

我建議您從使用本地護照計划開始,這將為您提供所需的確切信息。 https://github.com/jaredhanson/passport-local

使用正文分析器中間件獲取表單數據並使用它查詢數據庫。 首先,您需要執行npm install body-parser 然后,您可以嘗試以下操作。 請注意,這是非常粗糙的代碼,您可能應該使用其他一些出色的庫來處理身份驗證。

var express = require('express');
var app = express();
var bodyParser = require('body-parser);

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var User = new Schema ({
    username : String,
    password : String
});

mongoose.model('User',User);
mongoose.connect('mongodb://localhost:27017/MyDB');

app.use(bodyParser.urlencoded({ extended: true }));

app.set('view engine', 'ejs');

app.get('/',function(req,res)
{
    res.render('LoginPage');
});

app.get('/MainPage',function(req,res)
{
    res.render('MainPage');
});

app.post('/MainPage', function(req, res)
{
    // new code should come over here
    User.findOne({username: req.body.username, password: req.body.password}, function(err, user){
        if(err) {
            console.log(err);
        }
        else if(user){
            res.redirect('/MainPage');
        }
        else {
            console.log('Invalid');
        }
    });

});

app.get('*', function(req,res)
{
    res.send('Bad Route!');
});

var server = app.listen(3000, function() {
    console.log('listening on port 3000.');
});

您可以使用 bodyPasser 從 html 獲取輸入。 ( npm i body-parser . https://www.npmjs.com/package/body-parser )。

您可以使用 mongoose 保存用戶並找到用戶 ( npm i mongoose ) https://www.npmjs.com/package/mongoose

我這里用的是ejs。

使用 findOne 您可以找到注冊用戶是否可用https://mongoosejs.com/docs/api/model.html#model_Model-findOne

//jshint esversion:6
const express = require('express');
const bodyPasser = require('body-parser');
const ejs = require('ejs');
const mongoose = require('mongoose');


const app = express();
app.use(express.static('public'));
app.set('view engine','ejs');
app.use(bodyPasser.urlencoded({ extended: true }));

mongoose.set("strictQuery", false);
mongoose.connect('mongodb://localhost:27017/userDB',{useNewUrlParser:true})
  .then(() => console.log('Connected!'));

  const userSchema = {
    email:String,
    password:String
  }

  const User = new mongoose.model("User",userSchema);

app.get("/",(req,res)=>{
    res.render("home")
})

app.get("/register",(req,res)=>{
    res.render("register")
})

app.get("/login",(req,res)=>{
    res.render("login")
})

app.post("/register",(req,res)=>{
    const newUser = new User({
        email: req.body.username,
        password: req.body.password,
    });

    newUser.save((err)=>{
      if(err){
        console.log(err);
      }else{
        res.render("secrets")
      }
    })
})

app.post("/login",(req,res)=>{
   const username = req.body.username;
   const password = req.body.password;
    User.findOne({email:username},(err,user)=>{
       if(err){
        console.log(err);
       }else{
        if(user){
            if(user.password === password){
                res.render("secrets")
            }
        }
        
       }
    })
})



app.listen(3000,function(){
    console.log("port is statrt at 3000");
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM