Javascript 使用sqlite3-bookshelf在node.js中进行登录身份验证

Javascript 使用sqlite3-bookshelf在node.js中进行登录身份验证,javascript,node.js,session,express,bookshelf.js,Javascript,Node.js,Session,Express,Bookshelf.js,我正在尝试使用bookshelf和sqlite3在node.js中创建一个非常简单的登录身份验证 是的,我知道互联网上有很多例子,但没有一个真正使用sqlite或bookshelf,它们都是基于passport和mongoose的 当我尝试检查登录时,我会得到错误数据 这是我的代码 Login.js var express = require('express'); var router = express.Router(); var knex = require('knex')(require

我正在尝试使用bookshelf和sqlite3在node.js中创建一个非常简单的登录身份验证

是的,我知道互联网上有很多例子,但没有一个真正使用sqlite或bookshelf,它们都是基于passport和mongoose的

当我尝试检查登录时,我会得到错误数据

这是我的代码

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

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;
<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>
是未定义的,这意味着查询或其他方面一定有问题

更新

更新1

如果我尝试这个代码

router.post('/', function (req, res) {
new Users().fetch().then(function (processUsers) {
    console.log(processUsers.toJSON());     
});
});
我得到一个试图登录的显示用户…他的所有数据…hovever…如果我这样做:

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

上面说值是未定义的,我对书架不太熟悉,但你可能想试试这样的东西:

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

请记住,您将需要对存储在服务器上的密码进行哈希和加密。如果你不知道这是什么,请在运行这个东西之前先看一看,因为它非常重要。

如果你在
If
之前打印出变量
userName
user\u name
pw
password
,它们是你所期望的吗?@Pedro使用console.log之后,我发现user\u name=user.user\u name和password=user.password是“未定义”的,这意味着没有从数据库返回任何值…请给我显示processUsers和processUsers.toJSON()的console.log(请填写用户名和密码)。@Pedro我已经解决了问题,我会尽快发布解决方案,这似乎不起作用。如果我使用第一个选项,我得到的“无法读取属性”user_name为null“……如果我使用第二个选项,一切都是成功的,即使用户根本不存在……在第一种情况下,
console.log(users)
返回什么?