用 node 实现仿微信风格的 token 获取接口

流程图

依赖项

"dependencies": {
    "express": "^4.12.3",
    "jsonwebtoken": "^5.0.0",
    "mongoose": "^4.0.2",
    "redis-fast-driver": "0.0.9",
  }

获取token代码

function get_interface_token(req, res) {

    Jiekou.findOne({username: req.query.username}, function (err, interface_find) {

        if (err) throw err;

        if (!interface_find) {
            res.json({success: false, message: ‘认证失败,用户名找不到‘});
        } else if (interface_find) {

            // 检查密码
            if (interface_find.password != req.query.password) {
                res.json({success: false, message: ‘认证失败,密码错误‘});
            } else {

                //为接口加入token创建时间,使得每次获取的token都不一样
                var time = new Date();
                interface_find.token_create_time = time;

                // 创建token
                var token = jwt.sign(interface_find, config.secret, {
                    expiresInMinutes: 1440 // 设置过期时间
                });

                r.rawCall([‘hmset‘, req.query.username, ‘token‘, token], function (err, d) {
                    if (err) throw err;
                });
                r.rawCall([‘EXPIRE‘, req.query.username, config.token_expire_time], function (err, d) {
                    if (err) throw err;
                });

                // json格式返回token
                res.json({
                    success: true,
                    message: ‘Enjoy your token!‘,
                    token: token
                });
            }

        }
    })
}

检测token代码

function checktoken(req, res, next) {

    //检查post的信息或者url查询参数或者头信息
    var token = req.body.token || req.query.token || req.headers[‘x-access-token‘];

    // 解析 token
    if (token) {

        // 确认token
        jwt.verify(token, config.secret, function (err, decoded) {
            if (err) {
                return res.json({success: false, message: ‘token信息错误.‘});
            } else {
                console.log(decoded.username);
                r.rawCall([‘HEXISTS‘, decoded.username, ‘token‘], function (err, d) {
                    if (err) throw err;
                    console.log(d)
                    if (d === 1) {
                        // 如果没问题就把解码后的信息保存到请求中,供后面的路由使用
                        req.decoded = decoded;
                        next();
                    } else {
                        return res.status(403).send({
                            success: false,
                            message: ‘token已经过期!‘
                        });
                        next()
                    }
                })

            }
        });

    } else {

        // 如果没有token,则返回错误
        return res.status(403).send({
            success: false,
            message: ‘没有提供token!‘
        });

    }
}

代码文件结构

请参考用 nodejs express 搭建 restful api

时间: 2025-01-06 13:52:39

用 node 实现仿微信风格的 token 获取接口的相关文章

基于node(express)实现微信内第三方网页获取用户信息

近来,有个需求:用户在微信中打开第三方网页,然后输入姓名手机号登录.用户退出后,再次进入网页不需要登录.拿到需求后,就看了下微信的公众平台开发者文档,原来微信内打开第三方网页,可以拿到用户的openid(每个用户唯一),甚至经过授权后可以拿到用户的昵称.性别.所在地等信息. 废话少说,直接来吧! 第一步:获取code 在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo).获取co

微信公众平台--2.获取接口调用凭据

获取access_token access_token 是公众号的全局唯一票据,公众号调用各接口时都需要使用access_token,开发者需要进行妥善保管,至少保留512个字符空间,有效期为2小时,需要定时刷新,重复获取会导致上次获取的access_token失效. 公众号可以使用AppID和AppSecret调用本接口来获取access_token,每天可以获取有限次(10000). 接口调用请求: https://api.weixin.qq.com/cgi-bin/token?grant_

iOS开发-仿微信图片分享界面实现

分享功能目前几乎已成为很多app的标配了,其中微信,微博等app的图片分享界面设计的很棒,不仅能够展示缩略图,还可以预览删除.最近我在做一款社交分享app,其中就要实现图文分享功能,于是试着自行实现仿微信分享风格的功能. 核心思想: 主要是使用UICollectionView来动态加载分享图片内容,配合预览页面,实现动态添加和预览删除图片效果. 实现效果: 核心代码如下: 分享界面: // // PostTableViewController.h // NineShare // // Creat

react网页版聊天|仿微信、微博web版|react+pc端仿微信实例

一.项目介绍 基于react+react-dom+react-router-dom+redux+react-redux+webpack2.0+nodejs等技术混合开发的仿微信web端聊天室reactWebChat项目,实现了聊天记录右键菜单.发送消息.表情(动图),图片.视频预览,浏览器截图粘贴发送等功能. 二.技术选型 MVVM框架:react / react-dom 状态管理:redux / react-redux 页面路由:react-router-dom 弹窗插件:wcPop 打包工具

NET仿微信Oauth2.0

这个文章先说一说Oauth2.0的原理,再到应用场景,最后才是代码实现,这样才学会最终的思想,并在应用场景使用,所谓实践出真理. 1,Oauth2.0的原理 OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版.在互联网,经常用到OAuth2.0无非有三种场景: 1.1对外完全开放,系统与系统的对接,例如淘宝开放平台. 1.2内部系统对内部系统,如:(api.xxxx.com是一个子系统,web.xxxx.com是另外一个业务线的子系统

Android 超高仿微信图片选择器 图片该这么载入

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39943731,本文出自:[张鸿洋的博客] 1.概述 关于手机图片载入器,在当今像素随随便便破千万的时代.一张图片占领的内存都相当可观,作为高大尚程序员的我们.有必要掌握图片的压缩,缓存等处理,以到达纵使你有万张照片.纵使你的像素再高,我们也能正确的显示全部的图片.当然了,单纯显示图片没撒意思,我们决定高仿一下微信的图片选择器,在此,感谢微信!本篇博客将基于以下两篇博客: And

【一】仿微信飞机大战cocos2d-x3.0rc1

參考 [偶尔e网事] 的 [cocos2d-x入门实战]微信飞机大战  cocos2dx 2.0版本号,偶尔e网事他写的很具体,面面俱到,大家很有必要看下.能够通过以下链接跳转: cocos2d-x入门实战 这里面我以[cocos2d-x入门实战]微信飞机大战 为蓝本,用cocos2dx 3.0rc1翻版.安装环境什么的,我就不说了,网上都能够找到,我直接从游戏開始界面说起. 想往下看的话,你必须会的一件事,就是你已经能创建出cocos2dx3.rc1的helloworldproject. 以下

HTML5仿微信聊天界面、微信朋友圈实例

这几天使用H5开发了一个仿微信聊天前端界面,尤其微信底部编辑器那块处理的很好,使用HTML5来开发,虽说功能效果并没有微信那么全,但是也相当不错了,可以发送消息.表情,发送的消息自动回滚定位到底部,另外可以对消息.图片.视频有不同的右键处理提示,还有打赏.占屏等操作. html代码片段: <!--BEGIN 打赏--> <div class="js_dialog" id="J_Dialog_dashang" style="display:

小程序版聊天室|聊天小程序|仿微信聊天界面小程序

仿微信聊天小程序weChatRoom案例,一款基于微信小程序开发的聊天室实战项目.很早之前就有开发过一个h5版聊天室,最近又在原先思路的基础上开发了个小程序版聊天室,功能效果非常接近微信聊天,实现了消息.表情发送,小程序表情解析,图片.视频上传预览,打赏.红包等微交互场景.整体界面风格及效果挺不错哒. ◆ 先睹为快 ◆ 项目中用到的弹窗插件,是自己开发的小程序弹窗组件wcPop: <!-- <>引入弹窗模板.Start --><import src="/utils/