This commit is contained in:
click33 2023-07-27 19:43:53 +08:00
commit 1a1d90787a
7 changed files with 280 additions and 69 deletions

View File

@ -136,18 +136,6 @@ Sa-Token 目前主要五大功能模块:登录认证、权限认证、单点
## 交流群
QQ交流群707350988 [点击加入](https://jq.qq.com/?_wv=1027&k=tqbzHT2D)
加入 Sa-Token 框架 QQ、微信讨论群[点击加入](/more/join-group.md)
微信交流群:
![微信群](https://dev33-test.oss-cn-beijing.aliyuncs.com/sa-token/i-wx-qr.png ':size=230')
扫码添加微信备注sa-token邀您加入群聊
<br>
加入群聊的好处:
- 第一时间收到框架更新通知。
- 第一时间收到框架 bug 通知。
- 第一时间收到新增开源案例通知。
- 和众多大佬一起互相 (huá shuǐ) 交流 (mō yú)。

View File

@ -152,6 +152,7 @@
<!-- -->
<script src="./static/docsify-plugin.js"></script>
<script src="./static/is-star-plugin.js"></script>
<script>
var saTokenTopVersion = '1.35.0.RC'; // Sa-Token最新版本
var name = '<img style="width: 60px; height: 60px; vertical-align: middle;" src="logo.png" alt="logo" /> ';
@ -187,7 +188,7 @@
tabHeadings: true // 用标题+粗体来定制选项卡
},
// 自定义插件
plugins: [myDocsifyPlugin],
plugins: [myDocsifyPlugin, window.isStarPlugin],
}
</script>
<script src="static/docsify.min.js"></script>

View File

@ -183,7 +183,7 @@
<div class="s-fenge"></div>
<h2 class="s-title">优秀开源集成案例</h2>
<div class="feature-box s-case-box">
<!-- Snowy 5.5k -->
<!-- Snowy 6.1K -->
<div class="s-case">
<a href="https://gitee.com/xiaonuobase/snowy" target="_blank" class="s-case-link">
<img class="lazy" data-original="https://oss.dev33.cn/sa-token/case/case--snowy.png">
@ -192,16 +192,7 @@
<span class="s-author"> 小诺开源技术 </span>
<p class="s-case-intro">国内首个国密前后分离快速开发平台基于Vue3、Antdv、SaToken</p>
</div>
<!-- SpringBoot_v2 5.3k -->
<div class="s-case">
<a href="https://gitee.com/bdj/SpringBoot_v2" target="_blank" class="s-case-link">
<img class="lazy" data-original="https://oss.dev33.cn/sa-token/case/case--springboot_v2.png">
</a>
<h3 class="s-case-title">SpringBoot_v2</h3>
<span class="s-author">开源oschina</span>
<p class="s-case-intro">努力打造 springboot 框架的极致细腻的脚手架,原生纯净。</p>
</div>
<!-- RuoYi-Vue-Plus 4.1k -->
<!-- RuoYi-Vue-Plus 5.9k -->
<div class="s-case">
<a href="https://gitee.com/dromara/RuoYi-Vue-Plus" target="_blank" class="s-case-link">
<img class="lazy" data-original="https://oss.dev33.cn/sa-token/case/case--ruoyi-vue-plus.png">
@ -210,7 +201,16 @@
<span class="s-author"> 疯狂的狮子Li </span>
<p class="s-case-intro">重写 RuoYi-Vue 所有功能,集成 Sa-Token、Mybatis-Plus、Hutool 定期同步</p>
</div>
<!-- RuoYi-Cloud-Plus 1.5K -->
<!-- SpringBoot_v2 5.5k -->
<div class="s-case">
<a href="https://gitee.com/bdj/SpringBoot_v2" target="_blank" class="s-case-link">
<img class="lazy" data-original="https://oss.dev33.cn/sa-token/case/case--springboot_v2.png">
</a>
<h3 class="s-case-title">SpringBoot_v2</h3>
<span class="s-author">开源oschina</span>
<p class="s-case-intro">努力打造 springboot 框架的极致细腻的脚手架,原生纯净。</p>
</div>
<!-- RuoYi-Cloud-Plus 2.4K -->
<div class="s-case">
<a href="https://gitee.com/dromara/RuoYi-Cloud-Plus" target="_blank" class="s-case-link">
<img class="lazy" data-original="https://oss.dev33.cn/sa-token/case/case--ruoyi-cloud-plus.png">
@ -219,7 +219,7 @@
<span class="s-author"> 疯狂的狮子Li </span>
<p class="s-case-intro">重写 RuoYi-Cloud 所有功能 整合 SpringCloudAlibaba、Dubbo3.0、Sa-Token</p>
</div>
<!-- Sa-Plus 1K -->
<!-- Sa-Plus 1.1K -->
<div class="s-case">
<a href="https://gitee.com/click33/sa-plus" target="_blank" class="s-case-link">
<img class="lazy" data-original="https://oss.dev33.cn/sa-token/case/case--sa-plus.png">
@ -228,7 +228,7 @@
<span class="s-author"> 孔明 </span>
<p class="s-case-intro">一个基于 SpringBoot 的快速开发框架,内置代码生成器</p>
</div>
<!-- EasyAdmin 878 -->
<!-- EasyAdmin 996 -->
<div class="s-case">
<a href="https://gitee.com/lakernote/easy-admin" target="_blank" class="s-case-link">
<img class="lazy" data-original="https://oss.dev33.cn/sa-token/case/case--easy-admin.png">

View File

@ -6,9 +6,9 @@
### 1、加入QQ交流群
![QQ群](https://oss.dev33.cn/sa-token/qq-group-4.png ':size=180')
![QQ群](https://oss.dev33.cn/sa-token/qr/qq-group-5-gsa.png ':size=180')
QQ交流群707350988 [点击加入](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=98NOhX0Q3a2hcv3eURcnYMBuZUZrlHUH&authKey=td3pmX3BnYNr%2FCRkEDwE5FgGARk29D9HAMwL0bAfK7tqN8XN93jccnEanyZl18mM&noverify=0&group_code=837325627)
QQ交流群837325627 [点击加入](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=98NOhX0Q3a2hcv3eURcnYMBuZUZrlHUH&authKey=td3pmX3BnYNr%2FCRkEDwE5FgGARk29D9HAMwL0bAfK7tqN8XN93jccnEanyZl18mM&noverify=0&group_code=837325627)
### 2、加入微信交流群

View File

@ -21,6 +21,8 @@ Sa-Token 采用 Apache-2.0 开源协议,**承诺框架本身与官网文档永
| 赞助人 | 赞助金额 | 留言 | 时间 |
| :-------- | :-------- | :-------- | :-------- |
| [XiaoYi](https://gitee.com/getianit) | ¥ 100.0 | [亚洲云深圳BGP云服务器](https://www.asiayun.com/cart?action=configureproduct&pid=300) | 2023-07-24 |
| [张兆伟](https://gitee.com/zhang865700) | ¥ 50.0 | 感谢您的开源项目! | 2023-07-24 |
| [mikeinshanghai](https://gitee.com/mikeinshanghai)| ¥ 50.0 | Sa-Token, MeterSphere共成长共辉煌 | 2023-07-14 |
| [Dear胜哥](https://gitee.com/DearShengGe) | ¥ 10.0 | 有幸在摸鱼时间认真看完了全文档,感觉很是不错。开源不易,望作者继续扩展该框架功能! | 2023-06-30 |
| [SP](https://gitee.com/LSP1999) | ¥ 10.0 | 就是需要这种简单上手的项目 | 2023-06-15 |
@ -145,9 +147,11 @@ Sa-Token 采用 Apache-2.0 开源协议,**承诺框架本身与官网文档永
### 商业赞助
一次性赞助 100 元或以上,可帮助您的产品在 Sa-Token 交流群艾特全体成员推广一次。
一次性赞助 200 元或以上,可帮助您的产品在 Sa-Token 交流群艾特全体成员推广一次。
Sa-Token 目前总计10+微信交流群每个群人数400以上总人数5000+4个QQ交流群2000人群和1000人群总计人数6000+),大部分为 java 开发工程师,可有效推广您的产品。
并同时在赞助列表处高亮产品链接。
Sa-Token 目前总计14+微信交流群每个群人数大约400以上总计人数5000+4个QQ交流群2000人群和1000人群总计人数6000+),大部分为 java 开发工程师,可有效推广您的产品。
- 优先推广和程序员相关的互联网产品,比如:低代码开发平台、网课、开发软件、云服务器、个人博客等等,实体产品如键盘、显示器、耳机等等,如果是和程序员无关的产品,可酌情考虑是否推广。
- 拒绝接受违反法律法规、以及灰色相关的产品推广为避免不必要的麻烦目前也拒绝推广IP代理、上网工具等等。
@ -161,7 +165,7 @@ Sa-Token 目前总计10+微信交流群每个群人数400以上总人数50
``` txt
感谢 xx 老板对 Sa-Token 的商业赞助,以下是老板的产品,大家感兴趣的可以关注一下:
xxx 商品名称
链接https://xxx.com/xxx
链接https://xxxxxn.com/xxx
```
> 目前不接受 Sa-Token 官网文档插入广告推广,只接受一次性商业赞助推广。

View File

@ -1,7 +1,7 @@
# 更新日志
### 2023-6-23 @v1.35.0
### v1.35.0 @2023-6-23
- sa-token-core
- 优化:前端未提供 token 时,`getTokenSession()` 将抛出未登录异常,而不是返回 null。 **[不向下兼容]**
- 新增SaSession 新增字段:`type`、`loginType`、`loginId`、`token`。
@ -69,7 +69,7 @@
- `sa-token-context-grpc` -> `sa-token-grpc`
### 2023-1-11 @v1.34.0
### v1.34.0 @2023-1-11
新增插件:
- 新增:新增 `SpringBoot3.x` 集成插件,感谢 `@jry` 提供的参考思路。 **[重要]**
@ -95,7 +95,7 @@ sa-token-sso 单点登录:
### 2022-11-16 @v1.33.0
### v1.33.0 @2022-11-16
- 重构:重构异常状态码机制。 **[重要]**
- 重构:重构 sa-token-sso 模块异常码改为 300 开头sa-token-jwt 异常码改为 302 开头。 **[不向下兼容]**
- 新增:新增全局 Log 模块。 **[重要]**
@ -106,7 +106,7 @@ sa-token-sso 单点登录:
### 2022-10-28 @v1.32.0
### v1.32.0 @2022-10-28
- 修复:修复 sa-token-dao-redis-fastjson 插件多余序列化 `timeout` 字段的问题。
- 修复:修复 sa-token-dao-redis-fastjson 插件 `session.getModel` 无法反序列化实体类的问题。
- 修复:修复 `sa-token-quick-login` 插件指定拦截排除路由不生效的问题。
@ -146,7 +146,7 @@ sa-token-sso 单点登录:
### 2022-9-8 @v1.31.0
### v1.31.0 @2022-9-8
- 文档:新增优秀开源案例展示。
- 文档:新增博客展示,欢迎大家投稿。
- 新增:新增 `SaInterceptor` 综合拦截器。 **[重要]** **[不向下兼容]**
@ -185,7 +185,7 @@ sa-token-sso 单点登录:
### 2022-05-9 @v1.30.0
### v1.30.0 @2022-05-9
- 新增:新增集成 Web-Socket 鉴权示例。 **[重要]**
- 新增:新增集成 Web-SocketSpring封装版 鉴权示例。
- 新增:新增 jfinal 集成包 `sa-token-jfinal-plugin` **[重要]**
@ -230,7 +230,7 @@ sa-token-sso 单点登录:
- 修复:修复 `StpLogicJwtForSimple` 模式下 Extra 数据可能受到旧 token 影响的bug
### 2022-02-10 @v1.29.0
### v1.29.0 @2022-02-10
- 升级sa-token-jwt插件可在登录时添加额外数据。
- 重构优化Dubbo调用时向下传递Token的规则可避免在项目启动时由于Context无效引发的bug。
- 重构OAuth2 授权模式开放由全局配置和Client单独配置共同设定。
@ -252,7 +252,7 @@ sa-token-sso 单点登录:
- 完善:完善单元测试。
### 2021-11-5 @v1.28.0
### v1.28.0 @2021-11-5
- 新增:新增 `sa-token-jwt` 插件用于与jwt的整合 **[重要]**
- 新增:新增 `sa-token-context-dubbo` 插件,用于与 Dubbo 的整合 **[重要]**
- 文档文档新增章节Sa-Token 插件开发指南 **[重要]**
@ -266,7 +266,7 @@ sa-token-sso 单点登录:
- 文档:新增常见问题总结
### 2021-10-11 @v1.27.0
### v1.27.0 @2021-10-11
- 升级:增强 SaRouter 链式匹配能力 **[重要]**
- 新增:新增插件 Thymeleaf 标签方言 **[重要]**
- 新增:@SaCheckPermission 增加 orRole 字段用于权限角色“双重or”匹配 **[重要]**
@ -291,7 +291,7 @@ sa-token-sso 单点登录:
- [不向下兼容] 侦听器 doLogoutByLoginId 方法重命名为 doKickout
### 2021-9-2 @v1.26.0
### v1.26.0 @2021-9-2
- 优化:优化单点登录文档
- 新增:新增 `Http Basic` 认证 **[重要]**
- 新增:文档新增跨域解决方案
@ -300,7 +300,7 @@ sa-token-sso 单点登录:
- 示例:新增 `SSO-Server` 端前后端分离示例 **[重要]**
### 2021-8-16 @v1.25.0
### v1.25.0 @2021-8-16
- 新增:`SaRequest`新增`getHeader(name, defaultValue)`方法用于获取header默认值
- 新增:`SaRequest` 添加 `forward` 转发方法
- 新增Readme新增源码模块介绍、友情链接、正在使用Sa-Token的项目
@ -320,7 +320,7 @@ sa-token-sso 单点登录:
- 重构:修复 `SaReactorHolder.getContent()` 拼写错误:`content` -> `context`
### 2021-7-24 @v1.24.0
### v1.24.0 @2021-7-24
- 修复修复部分场景下Alone-Redis插件导致项目无法启动的问题
- 优化增加对SpringBoot1.x版本的兼容性
- 新增SaOAuth2Util新增checkScope函数用于校验令牌是否具备指定权限
@ -330,14 +330,14 @@ sa-token-sso 单点登录:
- 优化:大幅度优化文档示例
### 2021-7-19 @v1.23.0
### v1.23.0 @2021-7-19
- 新增Sa-Token-OAuth2 模块正式发布 **[重要]**
- 修复修复jwt集成demo无法正确注册StpLogic的bug
- 修复修复登录时某些场景下Session续期可能不正常的bug
- 优化:代码注释优化,文档优化
### 2021-7-10 @v1.22.0
### v1.22.0 @2021-7-10
- 新增SaSsoConfig 部分属性增加set连缀风格
- 优化SaSsoUtil 可定制化底层的 `StpLogic`
- 新增:新增 `SaSsoHandle` 大幅度简化单点登录整合步骤 **[重要]**
@ -346,7 +346,7 @@ sa-token-sso 单点登录:
- 优化:大幅度优化文档示例
### 2021-7-2 @v1.21.0
### v1.21.0 @2021-7-2
- 新增新增Token二级认证 **[重要]**
- 新增:新增`Sa-Token-Alone-Redis`独立Redis插件 **[重要]**
- 新增新增SSO三种模式彻底解决所有场景下的单点登录问题 **[重要]**
@ -356,7 +356,7 @@ sa-token-sso 单点登录:
- 更改yml配置前缀原`[spring.sa-token.]` 改为 `[sa-token.]`,目前版本暂时向下兼容,请尽快更新
### 2021-6-17 @v1.20.0
### v1.20.0 @2021-6-17
- 新增新增Solon适配插件感谢大佬 `@刘西东` 提供的pr **[重要]**
- 新增:新增`SaRouter.stop()`函数,用于一次性跳出匹配链功能 **[重要]**
- 新增:新增单元测试 **[重要]**
@ -377,7 +377,7 @@ sa-token-sso 单点登录:
- 为保证平滑更新旧API仍旧保留但已增加`@Deprecated`注解请尽快更新至新API
### 2021-5-10 @v1.19.0
### v1.19.0 @2021-5-10
- 新增注解鉴权新增定制loginType功能 **[重要]**
- 重构:重构目录结构,抽离`plugin`模块 **[重要]**
- 新增:新增 `sa-token-quick-login` 插件,零代码集成登录功能 **[重要]**
@ -385,7 +385,7 @@ sa-token-sso 单点登录:
- 优化:文档优化...
### 2021-4-24 @v1.18.0
### v1.18.0 @2021-4-24
- 新增:新增权限通配符功能,灵活设置权限 **[重要]**
- 修复:修复自动续签处的逻辑错误
- 新增新增Web开发常见漏洞防护建议
@ -398,7 +398,7 @@ sa-token-sso 单点登录:
- 重构:`SaTokenInsideUtil` -> `SaFoxUtil`
### 2021-4-17 @v1.17.0
### v1.17.0 @2021-4-17
- 修复在WebFlux环境中引入Redis集成包无法启动的问题
- 修复修复JWT集成示例中版本升级API的变更
- 优化:优化启动时字符画打印
@ -409,7 +409,7 @@ sa-token-sso 单点登录:
- 新增新增全局侦听器可在用户登陆、注销、被踢下线等关键性操作时进行一些AOP操作 **[重要]**
### 2021-4-12 @v1.16.0
### v1.16.0 @2021-4-12
- 新增:新增账号封禁功能,指定时间内账号无法登陆 **[重要]**
- 新增:核心包脱离`ServletAPI`,彻底零依赖! **[重要]**
- 新增:新增基于`ThreadLocal`的上下文容器 **[重要]**
@ -420,7 +420,7 @@ sa-token-sso 单点登录:
- 文档:新增推荐公众号列表
### 2021-3-23 @v1.15.0
### v1.15.0 @2021-3-23
- 新增:文档添加源码涉及技术栈说明
- 优化:优化路由拦截器模块文档,更简洁的示例
- 修复修复非web环境下的错误提示Request->Response
@ -440,7 +440,7 @@ sa-token-sso 单点登录:
- `SaRouteInterceptor`去出冗余API详情参考路由鉴权部分
### 2021-3-12 @v1.14.0
### v1.14.0 @2021-3-12
- 新增:新增`SaLoginModel`登录参数Model适配 [记住我] 模式 **[重要]**
- 新增:新增 `StpUtil.login()` 时指定token有效期可灵活控制用户的一次登录免验证时长
- 新增新增Cookie时间判断在`timeout`设置为-1时`Cookie`有效期将为`Integer.MAX_VALUE` **[重要]**
@ -458,7 +458,7 @@ sa-token-sso 单点登录:
- 文档:优化文档,部分模块添加图片说明
### 2021-2-9 @v1.13.0
### v1.13.0 @2021-2-9
- 优化:优化源码注释与文档
- 新增文档集成Gitalk评论系统
- 优化:源码包`Maven`版本号更改为变量形式
@ -473,7 +473,7 @@ sa-token-sso 单点登录:
- 新增:完善分布式会话的文档说明
### 2021-1-12 @v1.12.0
### v1.12.0 @2021-1-12
- 新增提供JWT集成示例 **[重要]**
- 新增:新增路由式鉴权,可方便的根据路由匹配鉴权 **[重要]**
- 新增:新增身份临时切换功能,可在一个代码段内将会话临时切换为其它账号 **[重要]**
@ -482,23 +482,23 @@ sa-token-sso 单点登录:
- 升级v1.12.1,新增`SaRouterUtil`工具类,更方便的路由鉴权 **[重要]**
### 2021-1-10 @v1.11.0
### v1.11.0 @2021-1-10
- 新增提供AOP注解鉴权方案 **[重要]**
- 优化自动生成token的算法
### 2021-1-9 @v1.10.0
### v1.10.0 @2021-1-9
- 新增:提供查询所有会话方案 **[重要]**
- 修复修复token设置为永不过期时无法正常被顶下线的bug感谢github用户 @zjh599245299 提出的bug
### 2021-1-6 @v1.9.0
### v1.9.0 @2021-1-6
- 优化:`spring-boot-starter-data-redis` 由 `2.3.7.RELEASE` 改为 `2.3.3.RELEASE`
- 修复:补上注解拦截器里漏掉验证`@SaCheckRole`的bug
- 新增新增同端互斥登录像QQ一样手机电脑同时在线但是两个手机上互斥登录 **[重要]**
### 2021-1-2 @v1.8.0
### v1.8.0 @2021-1-2
- 优化:优化源码注释
- 修复:修复部分文档错别字
- 修复:修复项目文件夹名称错误
@ -517,7 +517,7 @@ sa-token-sso 单点登录:
- 升级:开源协议修改为`Apache-2.0`
### 2020-12-24 @v1.7.0
### v1.7.0 @2020-12-24
- 优化项目架构改为maven多模块形式方便增加新模块 **[重要]**
- 优化:与`springboot`的集成改为`springboot-starter`模式,无需`@SaTokenSetup`注解即可完成自动装配 **[重要]**
- 新增:新增`activity-timeout`配置可控制token临时过期与续签功能 **[重要]**
@ -527,13 +527,13 @@ sa-token-sso 单点登录:
- 修复:修复文档首页样式问题
### 2020-12-17 @v1.6.0
### v1.6.0 @2020-12-17
- 新增花式token生成方案 **[重要]**
- 优化:优化`readme.md`
- 修复:修复`SaCookieOper`与`SaTokenAction`无法自动注入的问题
### 2020-12-16 @v1.5.1
### v1.5.1 @2020-12-16
- 新增细化未登录异常类型提供五种场景值未提供token、token无效、token已过期 、token已被顶下线、token已被踢下线 **[重要]**
- 修复:修复`StpUtil.getSessionByLoginId(String loginId)`方法转换key出错的bug感谢群友 @(#°Д°)、@一米阳光 发现的bug
- 优化:修改方法`StpUtil.getSessionByLoginId(Object loginId)`的isCreate值默认为true
@ -547,7 +547,7 @@ sa-token-sso 单点登录:
- 升级:开源协议修改为`MIT`
### 2020-9-7 @v1.4.0
### v1.4.0 @2020-9-7
- 优化修改一些函数、变量名称使其更符合阿里java代码规范
- 优化:`tokenValue`的读取优先级改为:`request` > `body` > `header` > `cookie` **[重要]**
- 新增:新增`isReadCookie`配置,决定是否从`cookie`里读取`token`信息
@ -556,7 +556,7 @@ sa-token-sso 单点登录:
- 修复:修复文档部分错误,修正群号码
### 2020-5-2 @v1.3.0
### v1.3.0 @2020-5-2
- 新增:新增 `StpUtil.checkLogin()` 方法,更符合语义化的鉴权方法
- 新增:注册拦截器时可设置 `StpLogic` ,方便不同模块不同鉴权方式
- 新增:抛出异常时增加 `loginType` 区分,方便多账号体系鉴权处理
@ -565,14 +565,14 @@ sa-token-sso 单点登录:
- 新增:新增文档的友情链接
### 2020-3-7 @v1.2.0
### v1.2.0 @2020-3-7
- 新增:新增注解式验证,可在路由方法中使用注解进行权限验证 **[重要]**
- 参考:[注解式验证](use/at-check)
### 2020-2-12 @v1.1.0
### v1.1.0 @2020-2-12
- 修复:修复`StpUtil.getLoginId(T defaultValue)`取值转换错误的bug
### 2020-2-4 @v1.0.0
### v1.0.0 @2020-2-4
- 第一个版本出炉

View File

@ -0,0 +1,218 @@
//
// 声明 docsify 插件
var isStarPlugin = function(hook, vm) {
// 切换文档的次数,每隔固定次数检测一下
let changePage = -1;
// 钩子函数:解析之前执行
hook.beforeEach(function(content) {
return content;
});
// 钩子函数:每次路由切换时,解析内容之后执行
hook.afterEach(function(html) {
changePage++;
if(changePage % 15 === 0) {
isStarRepo();
}
return html;
});
// 每钩子函数:次路由切换时数据全部加载完成后调用,没有参数。
hook.doneEach(function() {
});
// 钩子函数:初始化并第一次加载完成数据后调用,没有参数。
hook.ready(function() {
});
}
// 应用参数
const client_id = '0cc618beb08db99bff50e500e38c2144d95ada9abb51c00c44592726ecd583f4';
const client_secret = '2574c2aac8ce2142e34752dc5957dddcb30bc68df5c61de64251a3a6b11a51e5';
// const redirect_uri = 'http://local.dev33.cn:8848/sa-token-doc/doc.html';
const redirect_uri = 'https://sa-token.cc/doc.html';
// const docDomain = 'local.dev33.cn:8848';
const docDomain = 'sa-token.cc';
// 检查成功后,多少天不再检查
const allowDisparity = 1000 * 60 * 60 * 24 * 30;
// const allowDisparity = 1000 * 10;
// 判断当前是否已 star
function isStarRepo() {
// 非PC端不检查
if(document.body.offsetWidth < 800) {
console.log('small screen ...');
return;
}
// 判断是否在主域名下
if(location.host !== docDomain) {
console.log('非主域名,不检测...');
return;
}
// 判断是否近期已经判断过了
try{
const isStarRepo = localStorage.isStarRepo;
if(isStarRepo) {
// 记录 star 的时间,和当前时间的差距
const disparity = new Date().getTime() - parseInt(isStarRepo);
// 差距小于一月,不再检测,大于一月,再检测一下
if(disparity < allowDisparity) {
console.log('checked ...');
return;
}
}
}catch(e){
console.error(e);
}
// 开始获取 code
getCode();
}
// 去请求授权
function getCode() {
// 检查url中是否有code
const code = getParam('code');
if(code) {
// 有 code进一步去请求 access_token
getAccessToken(code);
} else {
// 不存在code弹窗提示询问
confirmStar();
}
}
// 弹窗提示点 star
function confirmStar() {
// 弹窗提示文字
let tipStr = "<p><b>嗨,同学,来支持一下 Sa-Token 吧,为项目点个 star </b></p>";
tipStr += "<div>仅需两步即可完成:<br>" +
'<div>1、打开 Sa-Token <a href="https://gitee.com/dromara/sa-token" target="_blank">开源仓库主页</a>,在右上角点个 star 。</div>' +
'<div>2、点击下方 [ 同意授权检测 ] 按钮,同意 Sa-Token 获取 API 权限进行检测。<a href="javascript:authDetails();" style="text-decoration: none;"></a></div>' +
"</div>";
tipStr += "<p><b>不点也没关系 ❤️ ❤️ ❤Sa-Token 将努力变得更加完善!😇</b></p>";
tipStr = '<div>' + tipStr + '</div>'
layer.confirm(tipStr, {title: '提示', btn: ['同意授权检测', '暂时不要,我先看看文档'], area: '450px', offset: '20%'}, function(index) {
//
layer.close(index);
// 用户点了确认,去 gitee 官方请求授权获取
goAuth();
});
}
// 跳转到 gitee 授权界面
function goAuth() {
const authUrl = "https://gitee.com/oauth/authorize" +
"?client_id=" + client_id +
"&redirect_uri=" + redirect_uri +
"&response_type=code" +
"&scope=projects";
location.href = authUrl;
}
// 获取 access_token
function getAccessToken(code) {
// 根据 code 获取 access_token
$.ajax({
url: 'https://gitee.com/oauth/token',
method: 'post',
data: {
grant_type: 'authorization_code',
code: code,
client_id: client_id,
redirect_uri: redirect_uri,
client_secret: client_secret,
},
success: function(res) {
// 拿到 access_token
const access_token = res.access_token;
// 根据 access_token 判断是否 star 了仓库
$.ajax({
url: 'https://gitee.com/api/v5/user/starred/dromara/sa-token',
method: 'get',
data: {
access_token: access_token
},
success: function(res) {
// success 回调即代表已经 stargitee API 请求体不返回任何数据
console.log('-> stared ...');
// 记录本次检查时间
localStorage.isStarRepo = new Date().getTime();
//
layer.alert('感谢你的支持 ❤️ ❤️ ❤️ Sa-Token 将努力变得更加完善!', function(index) {
layer.close(index);
// 刷新url去掉 code 参数
location.href = location.href.replace("?code=" + code, '');
})
},
error: function(e) {
// console.log('ff请求错误 ', e);
// 如下返回,代表没有 star
if(e.statusText = 'Not Found'){
console.log('not star ...');
layer.alert('未检测到 star 数据...', function() {
// 刷新url去掉 code 参数
location.href = location.href.replace("?code=" + code, '');
});
}
}
});
},
error: function(e) {
console.log('请求错误 ', e);
// 无效授权,可能是 code 无效
if(e.responseJSON.error == 'invalid_grant') {
console.log('无效code', code);
}
layer.alert('check error...' + e.responseJSON.error, function(index) {
layer.close(index);
// 刷新url去掉 code 参数
let url = location.href.replace("?code=" + code, '');
url = url.replace("&code=" + code, '');
location.href = url;
});
// 一天内不再检查,否则容易引起无限重定向
// const ygTime = allowDisparity - (1000 * 60 * 60 * 24);
// localStorage.isStarRepo = new Date().getTime() - ygTime;
// // 刷新url去掉 code 参数
// location.href = location.href.replace("?code=" + code, '');
}
})
}
// 疑问
function authDetails() {
const str = "用于检测的凭证信息将仅保存你的浏览器本地不发往任何第三方服务器Sa-Token 文档已完整开源,源码可查";
alert(str);
}
// 获取 url 携带的参数
function getParam(name, defaultValue){
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if(pair[0] == name){return pair[1];}
}
return(defaultValue == undefined ? null : defaultValue);
}