2016-12-24 7 views
0

私はExpressを使用してMongooseからデータを取得しようとしています。自分のサイトにログインするためのユーザー名とパスワードのフォームを作成しました。資格情報をチェックして、資格情報がデータベースに保存されている資格情報と同じであればそれを許可しますが、間違ったパスワードを入力しても何かを許可します。私のソースファイルはうまく見え、コンソールはエラーを投げていません。ファイルへの要旨は以下の通りです:ExpressでMongooseからデータを取得するにはどうすればよいですか?

login.ejs

register.ejs

とapp.jsファイル(原因私の評判にそれをGISTすることはできません):あなたのための

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


var app = express(); 

var options = { 
    server: { 
     socketOptions: { 
      keepAlive: 300000, connectTimeoutMS: 30000 
     } 
    }, 
    replset: { 
     socketOptions: { 
      keepAlive: 300000, 
      connectTimeoutMS : 30000 
     } 
    } 
}; 

var db = mongoose.connect('db_uri', options); 

var Schema = mongoose.Schema; 

var UserSchema = new Schema({ 
    email: String, 
    password: String 
}); 

var User = mongoose.model('Users', UserSchema); 

app.use(bodyParser.urlencoded({ extended: true })); 
app.use(express.static(__dirname+'/public')); 
app.set('view engine', 'ejs'); 
app.set('views', __dirname+'/public/templates'); 

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

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

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

app.post('/register', function (req, res) { 
    var email = req.body.email; 
    var password = req.body.password; 
    var user = new User({ 
    email: email, 
    password: password 
}); 
    user.save(function (err) { 
     if (err) throw err; 
     console.dir(user); 
     res.send('Account created successfully (email): ' + email); 
    }); 
}); 

app.post('/login', function (req, res) { 
    var email = req.body.email; 
    var password = req.body.password; 
    User.findOne({email: email, password: password}, function (err) { 
     if (err) throw err; 
     res.render('portal'); 
    }); 
}); 

app.listen(3000, function() { 
    console.log('Express server listening on http://localhost:3000'); 
}); 

感謝助けて!

+0

最も重要な部分を除外しました。アプリケーションコードです。あなたの質問に関連する部分を追加してください(リンクではなくインライン)。 – robertklep

+0

これはかなり一般的ですが、参考になるかもしれない多くのガイドがあります。 [Here](https://scotch.io/tutorials/using-mongoosejs-in-node-js-and-mongodb-applications)はかなり良いものです。 – morsecodist

+0

@robertklepソースコードを追加しました。必要があればチェックしてください! –

答えて

2

ログインハンドラでは、クエリがユーザーと一致するかどうかを実際に確認していません。

おそらく、errがその場合に設定されると仮定しますが、クエリ自体が正常に実行されたため(レコードを返さなかったため)、そうではありません。

は、クエリが有効なユーザーを返さかどうかを確認するために、追加のチェックを追加する必要があります。クエリは、ユーザーと一致しなかったとき、これは401(「無許可」)を返します

User.findOne({email: email, password: password}, function (err, user) { 
    if (err) throw err; 
    if (! user) return res.send(401); 
    res.render('portal'); 
}); 

+0

ありがとう!ちょうど私が必要なもの! –

+0

問題を解決した場合は、回答を受け入れたものとしてマークしてください。 –

関連する問題