基于gin框架和jwt-go中间件实现小程序用户登陆和token验证

本文核心内容是利用jwt-go中间件来开发golang webapi用户登陆模块的token下发和验证,小程序登陆功能只是一个切入点,这套逻辑同样适用于其他客户端的登陆处理。

小程序登陆逻辑

小程序的登陆逻辑在其他博主的文章中已经总结得非常详尽,比如我参考的是这篇博文:微信小程序登录逻辑整理,所以在这里不再赘述,只是大致归纳一下我的实现流程:

  1. 在小程序端调用wx.login方法,异步获得到微信下发的 jscode ,然后将 jscode 发送到 golang 服务端(如果需要详细用户信息,见参考博文的实现逻辑,流程大致相似);
  2. 服务端接收到 jscode 后,将其与 AppID 和 AppSecret 一起按官方文档的格式,发送到微信接口( AppID 和 AppSecret 在小程序管理平台上进行查看),如果接口调用成功,会返回以下字段:
  • openid:用户信息唯一识别id
  • session_key :解密用户信息的key
  • expires_in :key的有效期
  1. 根据 open_id 去数据库查找对应的用户信息,如果有,获得其平台 uid ,否则新建用户,返回新建信息 uid ;
  2. 将 uid 作为关键信息,生成 jwt 格式的 token 字符串,返回给小程序客户端,小程序收到 token 判定登陆成功,并将 token 存入 localstorage ,以后的每次请求先读取 localstorage 中的 token 放入请求头部作为身份标识,如果 token 失效或者无法读取,则重新执行登陆流程。

由于小程序段逻辑简单,而且不是本文讨论重点,代码实现就不贴出了,后面应该也不会再补。

服务端处理流程

服务端实现是本文的重头戏,由于 golang 语言的特性,我在实际开发中也踩了一些不大不小的坑,在这里进行详细记录,也作为一个经验总结,同时加深印象。服务端流程可以大致分为以下几个大步骤:

  1. 根据客户端发送的 jscode 获得用户 open_id
  2. 利用 open_id 获取平台 uid ,同时使用 jwt-go 中间件实现 token 的生成
  3. 封装 token 验证中间件,判断请求是否合法

本文的代码实现是在gin 框架基础上完成的,gin是一个非常轻量的 web http 处理框架,很符合 golang 轻框架的理念,但高度灵活也要求了一定的自主开发能力,比如请求数据库读写、请求信息读取和一些中间件的使用,这些都需要自己查找不同包的官方文档,去检索Api和查找对应的解决方案。虽然如此,但作为习惯了 .net平台 高度封装和甜到发腻的语法糖的 .neter ,在 golang 开发过程中也体会到了不一样的乐趣。废话不多说,如果对 golang 开发感兴趣的话,gin是一个我十分推荐的上手框架。

获得用户 open_id

在这里简单介绍一下路由、model和controller的一个分层开发实现:

  • main.go 程序入口,在这里进行路由分发
  • controllers/xx.go xx模块的路由请求处理代码相关
  • models/xx.go xx模块用到的结构体 struct (类似class)定和结构体相关函数定义
  • middleware 存放封装后的请求处理中间件

首先,按照gin框架的基础路由处理,调用AccountController中的WxLogin函数,接受处理/account/login路由的 GET 请求。

//main.go
...
func main(){
    r := gin.Default()
    account := new(controllers.AccountController)
    r.GET("/account/login", account.WxLogin)
}

然后在AccountController.go中先读取 jscode ,再将 jscode 和其他信息一起发送给微信服务器,获得官方返回的核心字段。

//controllers/AccountController.go
...
func (ctrl AccountController) WxLogin(c *gin.Context) {
     jscode := c.Query("jsCode")
    //发送jscode,获得用户的open_id
    wxSession, err := accountModel.WxLogin(jscode)
    ...
}

未完待续

原文地址:https://www.cnblogs.com/zzayne/p/8667517.html

时间: 2024-11-05 18:46:15

基于gin框架和jwt-go中间件实现小程序用户登陆和token验证的相关文章

Django中间件 及 form 实现用户登陆

Django中间件 及 form 实现用户登陆 Form 验证 密码调用md5 加密存储 form.add_error("字段名", "错误信息") 自定义错误信息 装饰器实现 用户认证 中间件实现 用户认证 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影响到性能. django默认的中间件在settings.py中 当用户发起请求

基于gin框架搭建的一个简单的web服务

刚把go编程基础知识学习完了,学习的时间很短,可能还有的没有完全吸收.不过还是在项目中发现知识,然后在去回顾已学的知识,现在利用gin这个web框架做一个简单的CRUD操作. 1.Go Web框架的技术选型 Top 6 web frameworks for Go as of 2017,可以看看这个go语言中Web框架的对比和老大的推荐,我选择gin框架作为学习go语言的框架. image.png 2.Gin介绍 gin框架的中文文档,这个文档相当好,清晰明了解释gin框架的整个用法.下面是gin

基于Bluemix快速构建部署一款Java小程序——微博影响力分析器

一.前言 近年来IT界风云际会,各种新概念如大数据.云平台.虚拟化等,如雨后春笋般层出不穷.而云平台,可以说是近些年来引领时代新潮的边缘概念之一,各大厂商竞相推出各种云产品,抢占云市场高地.近期,IT百年老厂IBM也推出了其花费重金打造的基于CloudFoundry开放标准的云平台Bluemix.本文就旨在从一位普通Java开发者角度,尝鲜Bluemix云平台及其提供的Cloudant服务,快速构建并部署一款Java小程序"微博影响力分析器". 二."微博影响力分析器&quo

基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)

高仿网易严选的微信小程序商城(微信小程序客户端) 界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易严选商城 功能和数据库参考ecshop 服务端api基于Node.js+ThinkJS+MySQL 计划添加基于Vue.js的后台管理系统.PC版.Wap版 GitHub: https://github.com/tumobi/nideshop-mini-program 项目截图 首页 专题 分类 商品列表 商品详情 购物车 订单中心 功能列表 首页 分类首页.分类商品.新品首发.

一个基于cocos2d-x 3.0和Box2d的demo小程序

p图demo小应用.想怎么p就怎么p 本文參考于http://blog.csdn.net/xiaominghimi/article/details/6776096和http://www.cnblogs.com/liufan9/archive/2013/04/11/3012275.html. 于上面基于cocos2d-x 2.0不一样的地方,本本是基于cocos2d-x 3.0. 首先.当然是下载和安装cocos2d-x 3.0了,网址:http://www.cocos2d-iphone.org/

微信小程序框架集合

UI组件 weui-wxss ★852 - 同微信原生视觉体验一致的基础样式库 Wa-UI ★122 - 针对微信小程序整合的一套UI库 wx-charts ★105 - 微信小程序图表工具 wemark ★85 - 微信小程序Markdown渲染库 WeZRender ★36 - 微信小程序Canvas增强组件 wetoast ★21 - 仿照微信小程序提供的showToast功能 wxapp-charts ★20 - 微信小程序图表charts组件 WeiXinProject ★18 - 列

01 Taro_Mall 开源多端小程序框架设计

项目介绍 Taro_Mall是一款多端开源在线商城应用程序,后台是基于litemall基础上进行开发,前端采用Taro框架编写,现已全部完成小程序和h5移动端,后续会对APP,淘宝,头条,百度小程序进行适配.Taro_Mall已经完成了 litemall 前端的所有功能 扫码体验 由于小程序没有认证,只发布了一个预览版,只能加15个人,如有需要,请点击小程序申请 小程序 h5移动端 项目架构 项目用Taro做跨端开发框架,Taro基本采用React的写法,项目集成了 redux dva 控制单向

Gin框架介绍及使用

Gin是一个用Go语言编写的web框架.它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍. 如果你是性能和高效的追求者, 你会爱上Gin. Gin框架介绍 Go世界里最流行的Web框架,Github上有24K+star. 基于httprouter开发的Web框架. 中文文档齐全,简单易用的轻量级框架. Gin框架安装与使用 安装 下载并安装Gin: go get -u github.com/gin-gonic/gin 第一个Gin示例:

Java基于ssm框架的restful应用开发

Java基于ssm框架的restful应用开发 好几年都没写过java的应用了,这里记录下使用java ssm框架.jwt如何进行rest应用开发,文中会涉及到全局异常拦截处理.jwt校验.token拦截器等内容. 1.jwt工具类 直接贴代码了,主要包括jwt的sign.verify.decode三个方法,具体实现如下: package com.isoft.util; import java.util.Date; import com.auth0.jwt.JWT; import com.aut