可以利用jsonwebtoken生成tokenid,在加密的過程中把用戶信息加密進去,通過解碼的形式可以獲取到用戶信,tokenid可以設置過期時間,一般用於檢驗用戶身份狀態(處於登錄還是過期中)
在express項目里下載 cnpm i jsonwebtoken -S
在下上面的index里面引入
下面是一個登錄接口
1 var express = require('express'); 2 var router = express.Router(); 3 var jwt = require('jsonwebtoken'); 4 var mongo = require('./mongo'); 5 var crypto=require('crypto') 6 /* GET home page. */ 7 router.post('/admin', function(req, res) { 8 if(req.query.action == 'login') { 9 var pwd = crypto.createHash('md5').update(req.body.pwd).digest('base64') 10 var selector = { 11 email: req.body.email, 12 pwd: pwd 13 } 14 mongo('find', 'user', selector, function(data) { 15 if(data.length != 0) { //生成tokenid 16 var tokenid = jwt.sign(selector, 'keven', { //selector:本身是一個對象,用於儲存用戶信息的 'keven':加密字段,可以自己隨便定義 expiresIn:過期時間單位是秒 17 expiresIn: 180 //3分鍾過期 18 }); 19 res.send({success:'1','tokenid':tokenid}) 20 }else{ 21 res.send({err:'0'}) 22 } 23 }) 24 }else if(req.query.action=='tokenid'){ 25 var tokenid=req.headers.authorization//獲取前端請求頭發送過來的tokenid 26 console.log(req.headers) 27 if(tokenid){ //校驗tokenid 28 jwt.verify(tokenid, 'keven', function(err, decoded) { // decoded:指的是tokneid解碼后用戶信息 29 console.log(err); 30 if (err) { //如果tokenid過期則會執行err的代碼塊 31 return res.send({ success: false, message: 'Failed to authenticate token.' }); 32 } else { 33 // if everything is good, save to request for use in other routes 34 req.decoded = decoded; //將解碼信息儲存於req中方便其他路由使用 35 // console.log(decoded) 36 res.send(decoded) 37 } 38 }) 39 } 40 } 41 }); 42 43 module.exports = router;
下面是public文件夾里的login.html測試頁面 把獲取到的tokenid儲存於localstorage
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <script src="javascripts/jquery-1.8.3.min.js"></script> 7 </head> 8 <body> 9 <div> 10 <p><input type="text" id="email"/></p> 11 <p><input type="text" id="pwd"/></p> 12 <button id="btn">登錄</button> 13 </div> 14 <script type="text/javascript"> 15 $('#btn').click(function(){ 16 $.ajax({ 17 type:"post", 18 url:"/api/admin?action=login", 19 data:{ 20 email:$('#email').val(), 21 pwd:$('#pwd').val() 22 }, 23 success:function(res){ 24 if(res.success){ 25 console.log(res) 26 localStorage.setItem('tokenid',res.tokenid); 27 window.location.href='./test.html' 28 }else{ 29 alert(res.err) 30 } 31 } 32 }); 33 }) 34 </script> 35 </body> 36 </html>
test.html把tokenid通過頭部發送給后端,后端檢驗用戶信息是否過期
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <script src="javascripts/jquery-1.8.3.min.js" type="text/javascript" charset="utf-8"></script> 7 </head> 8 <body> 9 <script type="text/javascript"> 10 $.ajax({ 11 type:'post', 12 url:'/api/admin?action=tokenid', 13 headers:{ 14 Authorization:localStorage.getItem('tokenid') 15 }, 16 success:function(res){ 17 console.log(res) 18 } 19 }) 20 </script> 21 </body> 22 </html>