[英]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.