nodejs jsonwebtoken運用


 可以利用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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM