2013-08-27 62 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 

請注意這樣存儲憑證和此身份驗證機制是完全不安全的。