实现自动登录 JWT Token
设置有效期,一旦失效用户就要重新登录,这样的体验非常差,需要做到用户在无感知的情况下,解决如何刷新Token的问题
JWT Token
token
,从而回避重放攻击。据所知,微信方案如下:
在第一次用账号密码登录服务器会返回两个 token
,时效长短不一样。短的时效过了之后,发送时效长的 token
重新获取一个短时效,如果都过期,就需要重新登录了长的token
是一个月,短的是2小时
登录后服务端返回两个token
(请求资源token
,刷新token
。前者时间短,比如1天,后者时间长,7天)。 资源 token
用于资源接口请求,刷新token
用于请求刷新token
。实现首次登录后免登,和token
刷新机制。
token
(用于一般的资源请求)refreshToken
(用于请求刷新token
,返回两个新的token
(短和长))项目地址:github地址
本项目是使用 go mod
方式,因此需要设置好对应的环境变量和代理。设置好后,在项目根目录直接 go build
。
ip,port
和mysql
等参数(config.yaml
)create.sql
脚本。在于script
目录)config.yaml
的两个时间(shortTime
和 `longTime1),比如短的10s,长的30s。register
接口注册账号login
接口登录login
得到的 token
,调用 comment
接口评论shortTime
后,token
失效,使用 refreshtoken
接口再次得到 token
和 refreshToken
。refreshToken
过期失效,再次调用login
接口登录得到 token
和 refreshToken
。[POST] http://172.16.0.66:8099/v1/user/register
请求:
{
"username":"laingjf",
"password":"123456"
}
返回:
{
"code": 1,
"message": "OK",
"data": {
"uuid": "5e4eb0f2453343e98919b930d8fcee52"
}
}
[POST] http://172.16.0.66:8099/v1/user/login
请求:
{
"username":"laingjf",
"password":"123456"
}
返回:
{
"code": 1,
"message": "OK",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NjY5NzA5NDcsImlhdCI6MTU2Njk3MDkyNywiaWQiOjEsIm5iZiI6MTU2Njk3MDkyNywidXNlcm5hbWUiOiJsYWluZ2pmIn0.pB5-TERuhSLogg-kdarK5J29LedfZJutaWi9IxeECs0",
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NjY5NzA5ODcsImlhdCI6MTU2Njk3MDkyNywiaWQiOjEsIm5iZiI6MTU2Njk3MDkyNywidXNlcm5hbWUiOiJsYWluZ2pmIn0.YkMm-a5Krp9b4Hsgxpod0y7KrLGMJJPlqkj83SKefmQ"
}
}
[POST] http://172.16.0.66:8099/v1/service/comment
headers Authorization :Bearer token
请求:
{
"topic_id":10,
"topic_type":"sport",
"content":"我来评论了,你好帅啊",
"from_uid":1
}
返回:
{
"code": 1,
"message": "OK",
"data": null
}
[POST] http://172.16.0.66:8099/v1/base/refreshtoken
headers Authorization :Bearer refreshToken
请求:
{
"code": 1,
"message": "OK",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NjY5NzA5NDcsImlhdCI6MTU2Njk3MDkyNywiaWQiOjEsIm5iZiI6MTU2Njk3MDkyNywidXNlcm5hbWUiOiJsYWluZ2pmIn0.pB5-TERuhSLogg-kdarK5J29LedfZJutaWi9IxeECs0",
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NjY5NzA5ODcsImlhdCI6MTU2Njk3MDkyNywiaWQiOjEsIm5iZiI6MTU2Njk3MDkyNywidXNlcm5hbWUiOiJsYWluZ2pmIn0.YkMm-a5Krp9b4Hsgxpod0y7KrLGMJJPlqkj83SKefmQ"
}
}
Mongodb批量操作,如批量删除,批量修改字段
http或https不带www的域名301跳转到带www的URL
gcc版本老旧,经常会碰到的问题:/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found。不要在网上找各种方法,直接升级gcc吧
error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by serv
mongoose条件操作符
redis配置多个端口,redis启动多个实例
linux如何挂载新买的硬盘?
vim编辑nginx conf文件时,设置高亮/显示行号
vi/vim打开文件提示Found a swap file by the name
linux报错:C++ compiler too old, need g++ 4.9.4 or clang++ 3.4.2 (CXX=g++)
linux下如何安装nodejs
linux下安装 redis,以及相关使用
linux下通过yum安装mongodb
需要跨域的项目,很多时候每次都会发送OPTIONS请求,能不能优化呢?
mongodb多表关联查询
角色、权限、用户之间的关系,以及如何设计
这样形如 A.B.C 的字符串时能敏感地认出这是使用了 jwt。发了这两篇文章后,有不少读者在文末留言,表达了对 jwt 使用方式的一些疑惑,以及到底哪些场景适合使用 jwt。我并不是 jwt 方面的专家,和不少读者一样,起初研究时我也存在相同疑惑,甚至在逐渐接触后产生了更大的疑惑,经过这段时间项目中的使用和一些自己思考,把个人的总结整理成此文。
go语言实现token自动续期
RSA加密的玩法
捕获save报错,返回controller
win10下安装nginx,配置返向代理
ERROR 9076 nodejs.SequelizeConnectionError: Client does not support authentication protocol requested by server; consider upgrading MySQL client
RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序
Ubuntu 16.04 发布时,一个引人注目的新特性便是 apt 命令的引入。其实早在 2014 年,apt 命令就已经发布了第一个稳定版,只是直到 2016 年的 Ubuntu 16.04 系统发布时才开始引人关注。随着 apt install package 命令的使用频率和普遍性逐步超过 apt-get install package,越来越多的其它 Linux 发行版也开始遵循 Ubuntu 的脚步,开始鼓励用户使用 apt 而不是 apt-get。
centos查看环境变量与设置环境变量在使用过程中很常见,本文整理了一些常用的与环境变量相关的命令,感兴趣的朋友可以参考下希望对你有所帮助
linux cenos下安装oh my zsh,oh my zsh 用于管理zsh配置,使shell界面更美观。 Zsh 是一款功能强大终端(shell)软件,既可以作为一个交互式终端,也可以作为一个脚本解释器。它在兼容 Bash 的同时 (默认不兼容,除非设置成 emulate sh) 还有提供了很多改进。
以腾讯云为例,配置nginx,实现https访问
nginx设置二级域名指向子目录
发现ip访问比nginx快多了,知道nginx出问题了~ 得给他优化优化。优化后由原来的2.7s打开,到600ms打开~nginx优化还是有用的
通过nginx开启gzip设置
通过Nginx反向代理,在一个云服务器上绑定多个域名,不同的域名访问不同的目录,端口
如何在Linux(CentOS 7)上安装Nginx,作为反向代理服务器。
nginx服务端实现CORS跨域配置
UUID,是Universally Unique Identifier的缩写,UUID出现的目的,是为了让分布式系统可以不借助中心节点,就可以生成UUID来标识一些唯一的信息;
命令从指定点开始将 File 参数指定的文件写到标准输出。如果没有指定文件,那么会使用标准输入。Number 变量指定将多少单元写到标准输出。Number 变量的值可以是正的或负的整数。如果值的前面有 +(加号),从文件开头指定的单元数开始将文件写到标准输出。如果值的前面有 -(减号),那么从文件末尾指定的单元数开始将文件写到标准输出。如果值前面没有 +(加号)或 -(减号),那么从文件末尾指定的单元号开始读取文件
今天想对一个问题进行分析和讨论,就是关于爬虫对网站页面爬取的问题,有些网站通过爬虫去采集其它的网站页面信息作为己用,大量的爬取行为会对web服务器有比较性能有影响,主要的表现就是会变得很慢。
将不带www的域名301重定向到带www的域名,利于SEO