2017-07-29 44 views
2

我正在嘗試爲我的服務器創建登錄請求。我想學的是 如何在用戶登錄時創建令牌。創建令牌後,我想用該令牌控制用戶的請求。這是我的代碼的例子。請告訴我我哪裏錯了。如果一切都是真的,你能向我解釋如何創建它嗎?Node.js使用Token ExpressJs進行身份驗證

var port = 8080; 
var express = require("express"); 
var bodyParser = require('body-parser'); 
var mysql = require('mysql'); 
var bcrypt = require('bcrypt'); 
var session = require('express-session'); 

var con = mysql.createConnection({ 
    host: "localhost", 
    user: "root", 
    password: "123456", 
    database: "circles", 
    debug: false 
}); 

process.on('uncaughtException', function (err) { 
    console.log('UNCAUGHT', err.stack); 
}); 

var app = express(); 
app.use(express.static("localhost" + "/public")); //use static files in ROOT/public folder 
app.use(bodyParser.json()); // support json encoded bodies 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(session({secret: 'letsputasmile', 
       proxy: true, 
       resave: true, 
       cookie: { maxAge : 2628000000 }, 
       saveUninitialized: true 
       })); 

app.get("/", function(request, response){ //root dir 
    response.send("Hello!!"); 
    console.log(response); 
}); 



app.post("/register", function (request, response) { 
    var name = request.body.name; 
    var username = request.body.username; 
    var pass = request.body.pass; 
    var salt = bcrypt.genSaltSync(10); 
    var hash = bcrypt.hashSync(pass,salt); 
    console.log(name); 
    console.log(username); 
    console.log(pass); 
    con.query("Insert Into user(name,username,password) Values(\"" + name + "\"," + "\"" + username + "\"," + "\"" + hash + "\")", 
     function (err,result) { 
     if(err) response.send("nop"); 
     else response.send("success"); 
     }); 
}); 

app.post("/login", function(request, response) { 
    var username = request.body.username; 
    var pass = request.body.pass; 
    var passer; 

    con.query("select password from user where username = " + "\"" + username + "\"",function (err, result) { 
     if(err) throw err; 
     if(result.length === 1) { 
      passer = result[0].password; 
     } 
     bcrypt.compare(pass, passer, function (err, res) { 
      if(res) response.send("success"); 
      else response.send("nop"); 
     }); 
    }); 
}); 

app.listen(port); 
+0

在這種情況下'session'是什麼?請更新您的代碼。 – ralphtheninja

+0

@ralphtheninja我上傳了一切。我想我無法理解會話部分 –

+0

,但你想完成什麼?你需要一個令牌來在另一個應用程序上使用它,或者一個令牌在同一個webapp中使用它? –

回答

1

你可以做的是創建一個jwt(json webtoken)。您基本上籤署了一些有效負載(無論您想要給客戶端的元數據),然後客戶端可以在請求某些內容時將該令牌傳回,並且服務器可以驗證該令牌(對稱密鑰)是否正確,並且還解析出服務器的數據需要,例如user_id或類似的。

檢查https://github.com/auth0/node-jsonwebtoken瞭解更多信息

相關問題