瀏覽代碼

Add login and register functions, allow using GET for testing purposes

Matt Coles 10 年之前
父節點
當前提交
a093259817
共有 1 個文件被更改,包括 63 次插入2 次删除
  1. 63 2
      index.js

+ 63 - 2
index.js

@@ -3,20 +3,81 @@ var app = express();
3 3
 var bcrypt = require('bcrypt-nodejs');
4 4
 var Redis = require('ioredis');
5 5
 var redis = new Redis();
6
+var bodyParser = require('body-parser');
7
+
8
+app.use(bodyParser.json()); // for parsing application/json
9
+app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
6 10
 
7 11
 app.get('/hello/(:name)?', function (req, res) {
8 12
     var name = req.params.name || "World";
9 13
     res.send('Hello ' + name + "!");
10 14
 });
11 15
 
12
-app.post('/register', function(req, res) {
16
+app.all('/register', function(req, res) {
17
+    var tmp_username = req.body.user || req.query.user;
18
+    var tmp_password = req.body.password || req.query.password;
19
+    var uquery       = 'user:' + tmp_username;
20
+    var user_object  = {};
13 21
 
22
+    redis.get(uquery).then(function (result) {
23
+        if (result !== "" && result !== undefined && result !== null) {
24
+            res.send({"registered": 0,
25
+                      "error": 1});
26
+        } else {
27
+            bcrypt.hash(tmp_password, null, null, function (err, hash) {
28
+                user_object["password"] = hash;
29
+                user_object["auth-key"] = bcrypt.hashSync(Date.now().toString() + tmp_username);
30
+                redis.set(uquery, JSON.stringify(user_object));
31
+                res.send({"registered": 1,
32
+                          "auth-key": user_object["auth-key"],
33
+                          "error": 0});
34
+            });
35
+        }
36
+    });
14 37
 });
15 38
 
16
-app.post('/login', function(req, res) {
39
+app.all('/login', function(req, res) {
40
+    var username = req.body.user || req.query.user;
41
+    var password = req.body.password || req.query.password;
42
+    var uquery   = 'user:' + username;
17 43
 
44
+    redis.get(uquery).then(function (result) {
45
+        if (result !== "" && result !== undefined && result !== null) {
46
+            var user_object = JSON.parse(result);
47
+            bcrypt.compare(password, user_object["password"], function (err, matched) {
48
+                if (matched === true) {
49
+                    if (undefined === user_object["auth-key"]) {
50
+                        var timestamp_user = Date.now().toString() + username;
51
+                        user_object["auth-key"] = bcrypt.hashSync(timestamp_user);
52
+                        redis.set(uquery, JSON.stringify(user_object));
53
+                        res.send({"logged_in": 1,
54
+                                  "auth-key": user_object["auth-key"],
55
+                                  "error": 0});
56
+                    } else {
57
+                        res.send({"logged_in": 1,
58
+                                  "auth-key": user_object["auth-key"],
59
+                                  "error": 0});
60
+                    }
61
+                    return;
62
+                } else {
63
+                    res.send({"logged_in": 0,
64
+                              "error": 2});
65
+                    return;
66
+                }
67
+            });
68
+        } else {
69
+            res.send({"logged_in": 0,
70
+                      "error": 1});
71
+            return;
72
+        }
73
+    });
18 74
 });
19 75
 
20 76
 app.listen(3000, function () {
21 77
     console.log('Example app listening on port 3000!');
22 78
 });
79
+
80
+process.on('SIGINT', function() {
81
+  console.log( "\nRecieved Ctrl-C, shutting down." );
82
+  process.exit(0);
83
+})