2015-06-16 81 views
0

我幾乎是web開發人員的初學者。我正在爲登錄驗證製作一個非常基本的網頁。我所要做的只是從數據庫(mongoose)檢查我的LoginPage上的用戶憑據(用戶名&密碼),並在他們正確的情況下重定向到下一頁(MainPage)。在Node.js和MongoDB中登錄表單(mongoose)

Login.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> 

app.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.'); 
}); 

任何幫助,將不勝感激。

+0

這有助於顯示您正在獲取的任何錯誤,或描述代碼演示的不良行爲,以便其他人可以嘗試協助解決具體問題而不僅僅是一般性任務。 –

+0

先生我在第二個文件中提到了一個評論,其中需要從db進行代碼驗證的邏輯。 –

回答

1

我建議你使用passport.js庫。 它不僅爲您提供創建本地身份驗證的好方法,還可以稍後集成Google,Facebook和Twitter(或任何oAuth)社交身份驗證方法。

您可以閱讀應該爲你提供一個良好的起點的文檔,或這些例子中的任何一個:

我建議你首先使用護照本地計劃,它會給你你需要的東西。 https://github.com/jaredhanson/passport-local

+0

是的,我知道。但我希望先嚐試一下,然後繼續前進。 –

+0

@ user_47它設置起來非常簡單,而且它更安全,否則你將不得不將密碼保存爲不加密(根本不安全),而且必須創建數據庫模型來保存和加載用戶,發明輪子?只是做一個文本比較是不安全的。 –

+0

感謝這些有用的鏈接,多瑞。這裏的主要問題是MongoDB查詢。我對一行代碼感興趣,它將實際上將我的文本框的值與數據庫中的值進行比較。之後我會繼續實施Passport.js。 –

0

使用body-parser中間件來獲取表單數據並使用它來查詢數據庫。首先你需要做一個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.'); 
}); 
+0

繼續收到此錯誤:「TypeError:undefined不是函數」 –

+0

您會在哪一行發生該錯誤? –

+0

user.findOne()...評論之後的一個。 –

相關問題