2013-08-27 65 views
1

我在检查Redis中的用户名和密码时遇到问题,它表示用户名和密码未定义。我希望你能帮我在NodeJs/ExpressJs中解决这个问题。ExpressJS,NodeJs和Redis简单登录错误

CODE:

app.js

var express = require('express'); 
var app = express(); 
var redis = require("redis"), 
client = redis.createClient(); 
var user, pass; 

app.use(express.bodyParser()); 

client.on("error", function (err) { 
console.log("error event - " + client.host + ":" + client.port + " - " + err); 
}); 

app.get('/', function (req, res) { 
res.sendfile(__dirname + '/index.html'); 
}); 

app.post('/', function (req, res) { 
console.log(""); 
console.log("--------------------"); 
console.log(req.body.user.username); 
console.log(req.body.user.password); 

console.log("--------EOF---------"); 
client.hmget(req.body.user.username + user, req.body.user.pasword + pass, 
redis.print); 
if (req.body.user.username && req.body.user.password == user && pass) 
{ 
    res.write("Successfully logged in!"); 
} 
else 
{ 
    res.write("Username or Password is incorrect"); 
} 
console.log("req.body.username: " + req.body.username); 
console.log("req.body.password: " + req.body.password); 
console.log("username: " + user); 
console.log("username: " + pass); 
res.end(); 

}); 

app.listen(80) 

这里是我的index.html的代码。

的index.html

<html> 
<head></head> 
<body> 
<form method="post" action="/"> 

Username: <input type="text" name="user[username]" > <br> 
Password: <input type="text" name="user[password]"> <br> 

<input type="submit" value="Submit"> 
</form> 
</body> 
</html> 
+0

提示:Redis客户端是异步的。您需要回拨某个地方来填充用户并传递。 –

+0

你能帮我修复我的代码吗?因为我不明白:(谢谢Didier Spezia :) –

回答

0

我假定Redis的实例包含所谓的“证书”含有用户和密码之间的关联的散列对象。

HMSET credentials didier mypass 

我会重写后的方法如下:

app.post('/', function (req, res) { 
    console.log("--------------------"); 
    console.log(req.body.user.username); 
    console.log(req.body.user.password); 
    console.log("--------EOF---------"); 
    client.hmget('credentials', req.body.user.username, function (err,pass) { 
     console.log("req.body.username: " + req.body.user.username); 
     console.log("req.body.password: " + req.body.user.password); 
     console.log("pass: " + pass); 
     console.log("err: " + err); 
     if ((!err) && pass && pass == req.body.user.password) 
      res.write("Successfully logged in!"); 
     else 
      res.write("Username or Password is incorrect"); 
     res.end(); 
    }); 
}); 

有了这个代码,我有成功的登录信息,并以下跟踪:

-------------------- 
didier 
mypass 
--------EOF--------- 
req.body.username: didier 
req.body.password: mypass 
pass: mypass 
err: null 

请注意这样存储凭证和此身份验证机制是完全不安全的。