ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

nodejs jsonwebtoken运用

2019-03-08 10:02:51  阅读:337  来源: 互联网

标签:function req err nodejs res tokenid jsonwebtoken var 运用


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

 

标签:function,req,err,nodejs,res,tokenid,jsonwebtoken,var,运用
来源: https://www.cnblogs.com/Abuladuo/p/10494086.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有