2015-06-16 8 views
0

Я почти новичок для веб-разработчиков. Я делаю довольно простой веб-страницу для аутентификации входа. Все, что я пытаюсь сделать, это проверить учетные данные пользователя (имя пользователя & пароль) на моем LoginPage из базы данных (mongoose) и перенаправить на следующую страницу (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

Спасибо за эти полезные ссылки, Dory. Основная проблема здесь заключается в запросах 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() ... один сразу после комментария. –

Смежные вопросы