2016-04-04 30 views
0

bookshelfとsqlite3を使用して、node.jsで非常に簡単なログイン認証を作成しようとしています。sqlite3 - bookshelfを使用したnode.jsのログイン認証

はいインターネット上には多くの例がありますが、実際にはsqliteや本棚を使用しているわけではありませんが、ほとんどすべてパスポートとマングースに基づいています。

ログインを確認しようとすると、エラーデータが表示されます。

これは私のコード

Login.js

var express = require('express'); 
var router = express.Router(); 
var knex = require('knex')(require('../knexfile.js').development); 
var bookshelf = require('bookshelf')(knex); 
var app = express(); 

var User = bookshelf.Model.extend({ 
tableName: 'users' 
}); 

router.get('/', function (req, res) { 
res.render('Login'); 
}); 

router.post('/', function (req, res) { 

var userName = req.body.user_name; 
var pw = req.body.password; 
var user_name = User.user_name; 
var password = User.password; 

if (userName == user_name && pw == password) 
{ 
    console.log("Success!"); 
} 
else 
{ 
    console.log("Error!"); 
} 
}); 
module.exports = router; 

Login.ejs

<h2>Login</h2> 
<form method="post"> 
<label>User name</label><br> 
<input type="text" name="user_name" id="user_name"/><br><br> 
<label>Password</label><br> 
<input type="password" name="password" id="password"/><br><br> 
<input type="submit" value="Login"/> 
</form> 

では、どうもありがとうございました!

示唆したように、私は値を表示しようとしたと私は

両方

var user_name = User.user_name; 
var password = User.password; 
を実現し、クエリや何かに何か問題がなければならないことを意味する、定義されていませんか?

UPDATE

enter image description here

UPDATE1私がログインしようとしたユーザーを表示します

router.post('/', function (req, res) { 
new Users().fetch().then(function (processUsers) { 
    console.log(processUsers.toJSON());  
}); 
}); 

私はこのコードをしようとした場合 ... ...すべて彼のデータの... hovewever ...私はこれを行う場合:

var us_name = processUsers.user_name; 
console.log(us_name); 

それは値が未定義であると言う

+0

変数 'userName'、' user_name'、 'pw'、' password'を 'if'の直前に表示すると、あなたはそれを期待していますか? – Pedro

+0

@Pedro console.logを使用した後、私はuser_name = User.user_nameとpassword = User.passwordが「未定義」であることを知りました。つまり、値はデータベースから返されません。 – aiden87

+0

processUsersとprocessUsersのconsole.logを表示します。 .toJSON()を入力してください(ユーザー名とパスワードを入力しないでください)。 – Pedro

答えて

0

私は本棚に非常に精通していないよしかし、あなたはこのような何か試してみたいことがあります。

router.post('/', function (req, res) { 
    new User().fetchAll().then(processUsers).catch(catchErrors); 

    function processUsers(users) { 
     console.log(users); 
     var loggedIn = false; 
     for (var i = 0; i < users.length; i++) { 
      if (users[i].user_name == req.body.user_name && users[i].password == req.body.password) { 
       loggedIn = true; 
       break; 
      } 
     } 
     if (loggedIn) { 
      console.log("Success!"); 
     } else { 
      console.log("Error!"); 
     } 
    } 

    function catchErrors(error) { 
     console.log(error); 
     console.log('An error occured'); 
    } 
}); 

または

router.post('/', function (req, res) { 
    new User({user_name : req.body.user_name, password: req.body.password}).fetch().then(processUser).catch(catchErrors); 

    function processUser(user) { 
     console.log(user); 
     console.log("Success!"); 
    } 

    function catchErrors(error) { 
     console.log(error); 
     console.log('An error occured'); 
    } 
}); 

サーバに保存されているパスワードをハッシュ化して暗号化したいと考えています。それが何であるかわからない場合は、非常に重要なので、このようなものを実行する前に見てください。

+0

これは動作していないようです。私は最初のオプションを使用する場合、私は "あなたが存在していない場合でも、あなたも2番目のオプションを使用して、すべての成功です、" – aiden87

+0

最初のケースでは、 'console.log(users)'は何を返しますか? – Pedro

+0

更新を参照してください – aiden87

関連する問題