JWT TOKEN验证

在 ThinkPHP 中使用 JWT 签发 Token JWT,可以看成是一种Token签发方案。Token通常叫做认证令牌,用于客户端和服务端在交互时的身份认证。JWT数据量小,传输速度快。使用json数据格式,可跨语言。即签即发,不需要在服务端保存。适合移动端。更多关于 JWT 的信息可访问官网查看 >>> 阅读详情
安装
composer require tinywan/jwt
配置文件路径
/config/plugin/tinywan/jwt/app.php
接入中间件
namespace app\middleware;

use support\Redis;
use Tinywan\Jwt\JwtToken;
use Webman\Http\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;

class AuthTokenMiddleware extends BaseController implements MiddlewareInterface
{

    public function process(Request $request, callable $handler): Response
    {
        try {
            JwtToken::verify();
        } catch (\Throwable $e) {
            return $this->error('登录状态有误,请重新登录',10003);
        }
        $tokenInfo = JwtToken::getExtend();
        if(!$tokenInfo['id']){
            return $this->error('登录状态有误,请重新登录',10000);
        }
        $key = "routineUser:" . $tokenInfo['id'];
        Redis::del($key);
        $redisInfo = Redis::get($key);
        if($redisInfo){
             $uInfo = json_decode($redisInfo,true);
        }else{
            $uInfo = (new WechatUsersLogic())->getInfo([['id','=',$tokenInfo['id']]]);
            $uInfo['wechat_setting'] = $tokenInfo['wechat_setting'];
//            $uInfo['code'] = $tokenInfo['code'];
            $uInfo['pid'] = $tokenInfo['pid'];
            Redis::set($key,json_encode($uInfo));
        }
        $request->routineUser = $uInfo;
        if(empty($request->routineUser)){
            return $this->error('登录状态有误,请重新登录',10000);
        }
        if($request->routineUser['is_del'] !== 0){
            return $this->error('账号已被冻结 请联系管理员',10002);
        }
        /** @var Response $response */
        $response = $handler($request);
        // Add cross domain HTTP header
        /*$response->withHeaders([
            'Access-Control-Allow-Origin'      => '*',
            'Access-Control-Allow-Credentials' => 'true',
        ]);*/
        return $response;
    }
}
生成Token
#[RequestMapping(["/login"], methods: ['GET', 'POST', 'OPTIONS'])]
#[Apidoc\Title("登录注册")]
#[Apidoc\Url("/webapi/user/login")]
#[Apidoc\Method("POST,GET")]
#[Apidoc\ParamType("formdata")]
#[Apidoc\Param("account", type: "string", require: true, default: "0xFFabddf5d772662bBb5Fe358D6cDFEDE5B795e15", desc: "区块链地址")]
#[Apidoc\Param("invite", type: "string", require: true, default: "OzGGBB23Vc", desc: "邀请码")]
#[Apidoc\Returned("authorization", type: "string", default: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ3ZWJtYW4udGlueXdhbi5jbiIsImF1ZCI6IndlYm1hbi50aW55d2FuLmNuIiwiaWF0IjoxNzA4NTkzMzM4LCJuYmYiOjE3MDg1OTMzMzgsImV4cCI6MTcwOTE5ODEzOCwiZXh0ZW5kIjp7ImlkIjoyfX0._2Bed8AdUvSCe7-TEP0-1yC_n5_b-bSddXCx76GdES0", desc: "authorization")]
public function login(Request $request): Response
{
    $key = "login" ;
    if (Redis::setNx($key, 1)) {
        Redis::expire($key, 1);
    } else {
        return error(lang($request, '操作太频繁,请稍后再试!'));
    }
    $tokenData = JwtToken::generateToken([
        'id' => 1, // 这里必须是一个全局抽象唯一id
    ]);
    return success(lang($request, '操作成功'), ['aToken' => $tokenData['access_token'],'rToken'=>$tokenData['refresh_token']]);
}
刷新Token
    #[Apidoc\Title("刷新TOKEN")]
    #[Apidoc\Url("/webapi/common/refreshToken")]
    #[Apidoc\Method("POST,GET")]
    #[Apidoc\ParamType("formdata")]
    #[Apidoc\Returned("origin_name", type: "string", default: "u=3019768837,3832590544&fm=253&fmt=auto&app=138&f=JPEG.webp", desc: "文件原名")]
    #[Apidoc\Returned("save_name", type: "string", default: "593f53411eb2e08c28dd0f15b555b7dc0bf83aae.webp", desc: "存储后文件名")]
    #[Apidoc\Returned("save_path", type: "string", default: "E:\\phpstudy_pro\\WWW\\QianYi\\Dapp\\mining\\public/uploads/20240222\\593f53411eb2e08c28dd0f15b555b7dc0bf83aae.webp", desc: "存储路径")]
    #[Apidoc\Returned("url", type: "string", default: "/uploads/20240222\\593f53411eb2e08c28dd0f15b555b7dc0bf83aae.webp", desc: "展示路径")]
    #[Apidoc\Returned("extension", type: "string", default: "webp", desc: "图片后缀")]
    #[RequestMapping(["/refreshToken"], methods: ['GET', 'POST', 'OPTIONS'])]
    public function refreshToken($request): Response
    {
        try {
            $tokenData = JwtToken::refreshToken();
        }catch (\Throwable $e){
            return error(lang($request,$e->getMessage()));
        }
        return success(lang($request, '操作成功'), ['aToken' => $tokenData['access_token'],'rToken'=>$tokenData['refresh_token']]);
    }
JWT文档描述
**响应参数**

| 参数|类型|描述|示例值|
|:---|:---|:---|:---|
|token_type| string |Token 类型 | Bearer |
|expires_in| int |凭证有效时间,单位:秒 | 36000 |
|access_token| string |访问凭证 | XXXXXXXXXXXXXXXXXXXX|
|refresh_token| string | 刷新凭证(访问凭证过期使用 ) | XXXXXXXXXXXXXXXXXXXX|

## 支持函数列表

1、获取当前`id`
```php
$id = Tinywan\Jwt\JwtToken::getCurrentId();
```

2、获取所有字段
```php
$email = Tinywan\Jwt\JwtToken::getExtend();
```

3、获取自定义字段
```php
$email = Tinywan\Jwt\JwtToken::getExtendVal('email');
```

4、刷新令牌(通过刷新令牌获取访问令牌)
```php
$refreshToken = Tinywan\Jwt\JwtToken::refreshToken();
```

5、获令牌有效期剩余时长
```php
$exp = Tinywan\Jwt\JwtToken::getTokenExp();
```

6、单设备登录。默认是关闭,开启请修改配置文件`config/plugin/tinywan/jwt`
```php
'is_single_device' => true,
```
> 单设备登录支持定义客户端 `client` 字段,自定义客户端单点登录(默认为`WEB`,即网页端),如:`MOBILE`、`APP`、`WECHAT`、`WEB`、`ADMIN`、`API`、`OTHER`等等
```php
$user = [
    'id'  => 2022,
    'name'  => 'Tinywan',
    'client' => 'MOBILE',
];
$token = Tinywan\Jwt\JwtToken::generateToken($user);
var_dump(json_encode($token));
```

7、获取当前用户信息(模型)
```php
$user = Tinywan\Jwt\JwtToken::getUser();
```
该配置项目`'user_model'`为一个匿名函数,默认返回空数组,可以根据自己项目ORM定制化自己的返回模型

**ThinkORM** 配置
```php
'user_model' => function($uid) {
// 返回一个数组
return \think\facade\Db::table('resty_user')
	->field('id,username,create_time')
	->where('id',$uid)
	->find();
}
```

**LaravelORM** 配置

```php
'user_model' => function($uid) {
// 返回一个对象
return \support\Db::table('resty_user')
	->where('id', $uid)
	->select('id','email','mobile','create_time')
	->first();
}
```

8、令牌清理
```php
$res = Tinywan\Jwt\JwtToken::clear();
```
> 只有配置项 `is_single_device`为`true` 才会生效。可选参数:`MOBILE`、`APP`、`WECHAT`、`WEB`、`ADMIN`、`API`、`OTHER`等等

9、自定义终端`client`
```php
// 生成WEB令牌
$user = [
    'id'  => 2022,
    'name'  => 'Tinywan',
    'client' => JwtToken::TOKEN_CLIENT_WEB
];
$token = JwtToken::generateToken($user);

// 生成移动端令牌
$user = [
    'id'  => 2022,
    'name'  => 'Tinywan',
    'client' => JwtToken::TOKEN_CLIENT_MOBILE
];
$token = JwtToken::generateToken($user);
```
默认是`WEB`端

10、自定义访问令牌和刷新令牌过期时间

```php
$extend = [
    'id'  => 2024,
    'access_exp'  => 7200,  // 2 小时
];
$token = Tinywan\Jwt\JwtToken::generateToken($extend);
```

11、令牌过期错误码

* 访问令牌
  * 身份验证令牌无效:`401011`
  * 身份验证令牌尚未生效:`401012`
  * 身份验证会话已过期,请重新登录!:`401013`
  * 获取的扩展字段不存在:`401014`
  * 访问令牌未知错误:`401015`
* 刷新令牌
  * 刷新令牌无效:`401021`
  * 刷新令牌尚未生效:`401022`
  * 刷新令牌会话已过期,请再次登录!:`401023`
  * 刷新令牌获取的扩展字段不存在:`401024`
  * 刷新令牌未知错误:`401025`

JWT产生和验证Token Token验证   最近了解下基于 Token 的身份验证,跟大伙分享下。很多大型网站也都在用,比如 Facebook,Twitter,Google+,Github 等等,比起传统的身份验证方法,Token 扩展性更强,也更安全点,非常适合用在 Web 应用或者移动应用上。Token 的中文有人翻译成 “令牌”,我觉得挺好,意思就是,你拿着这个令牌,才能过一些关卡。 传统的Token验证 ... 阅读详情

相关推荐

基于jwt token验证

JWT全称是JSON WEB TOKEN,是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于在多方之间安全地传输JSON格式的信息。JWT主要由三部分组成:头部(Header)、负载(Payload)、签名(Signature),每部分之间以点(.)分隔。头部(Header):这部分包含令牌类型和所使用的算法。载荷(Payload):这部分包含用户信息和其他元数据。签名(Signature):这部分是对头部和载荷进行加密签名以验证其完整性和真实性的部分。

m0_71472890的博客 1460

thinkphp使用jwt鉴权

1.下载jwt(jwt.io)找PHP获星最多的就行 2.放入vendor中,并且注释顶部的命名空间 3.前端用户提交账号密码后,写入token传给前端保存,之后带token访问 <?php namespace app\index\controller; use think\Controller; use think\Db; class Index extends Bas...

u014391889的博客 3280

JWT 实现token验证

1. 什么是JWT JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用 户和服务器之间传递安全可靠的信息。一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。 头部(Header) 头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以 被表示成一个JSON对象。 {"typ":"JWT","alg":"HS256"} 在头部指明了签名算法是HS256算法。 我们进行BASE64编 码http://base64.xpcha.c

weixin_41446608的博客 1676

jwt身份验证php,think-jwt: thinkphp 的 jwt (JSON Web Token)身份验证扩展包

think-jwtthinkphp的jwt(JSON Web Token)身份验证包。支持Header、Cookie、Param等多种传参方式。包含:验证、验证并且自动刷新等多种中间件。新支持thinkphp6.0环境要求php >= 7.0thinkphp ^5.1.10 || ^6.0.0说明目前支持如下三大类型加密方式:RSA,HASH,DSA。再各分256、384、512位。默认是H...

weixin_35023786的博客 630

Token验证—JWT方法

使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的: 客户端使用用户名跟密码请求登录 服务端收到请求,去验证用户名与密码 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求

大三了啊 3328

Shiro + JWT实现Token验证的快速入门

章节目录1. 用户认证1.1 Session认证1.1.1 什么是Session?1.1.2 什么是Session认证? 1. 用户认证 用户认证一般分为:Session认证、Token认证(JWT是一种特殊的Token认证) 1.1 Session认证 Session认证用于一般的Web项目中。 1.1.1 什么是Session? HTTP协议是一种无状态协议。即:每次服务端接收客户端的请求时,都是一个全新的请求,服务端并不知道客户端的历史请求。例如说:当客户端进行账号和密码通过了身份认证,接着向服务端发

菩提小猿的博客 5265

JWT 完整使用详解

JWT全称JSON Web Tokens,是一个非常轻巧的规范。这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息。它的两大使用场景是:认证和数据交换。 一、安装之前 资料 先摆出几个参考资料,可以把连接都打开,方便查阅: 项目 Wiki 公众号 coding01,JWT 安装及简单例子 官方安装指导文档 JWT 的介绍 二、安装及基础配置 Larave...

曾沂宏的博客 9838

springboot通过jwt实现token验证

throw new ServiceException("请登录", "401");import com/*** @date 2024年07月28日 22:13} }/*** @date 2024年07月28日 22:13} }/*** @date 2024年07月28日 22:13} }R;import org/*** @date 2024年07月28日 22:13} }/**

m0_50207524的博客 1284

jwt 的简单使用

文章目录1、简介2、使用场景3、jwt 优势4、JSON Web Token 结构①、HEADER②、PAYLOAD③、SIGNATURE5、测试 JWT①、导包②、运行6、总结 官网 1、简介 JSON Web Token(JWT)是一个基于 RFC 7519 的开放数据标准,它定义了一种宽松且紧凑的数据组合方式,使用 JSON 对象在各应用之间传输信息(信息加密即 jwe,签名即 jws)。 2、使用场景 授权: 简单说就是生成 token (使用较多) 这是使用 JWT 最常见的场景。用户登录后

不懂一休 1万+

3D Slicer:从入门到精通——数据模块之DICOM

该模块允许导入、导出和网络传输DICOM数据。Slicer支持DICOM功能的常用子集,其特定功能由临床研究的需求驱动:从磁盘读取和写入数据集,并通过DIMSE和DICOMweb网络协议进行网络传输——查询检索发送和接收数据集。医学数字成像和通信(DICOM)是信息交换数字放射学的广泛使用标准。在大多数情况下,医院使用的成像设备(CT和MR扫描仪)将生成保存为DICOM对象的图像。DICOM按以下层次结构组织数据患者… 可以有1个或多个研究(单次成像检查) … 可以有1个或多个系列。

walt3433的博客 6066

深入解析SPLL单相软件锁相环:从SOGI原理到PI系数调优实践

本文深入解析SPLL单相软件锁相环技术,从SOGI原理到PI系数调优实践,详细介绍了其在数字电源设计中的应用。通过数学推导和实际调试经验,帮助工程师快速掌握锁相环的核心参数计算和优化方法,提升电网相位追踪的精确度和响应速度。

weixin_30316097的博客 382

JWT实现token登录验证

Jwt是一种用于在各方之间安全地传输信息的开放标准(RFC 7519)。它可以被用于身份验证和信息交换,常见于Web应用中,以支持单点登录(SSO)或API身份验证。JWT 的内容可以通过数字签名保护,以确保信息的完整性和真实性。

m0_73641772的博客 6291

orange软件:入门使用

orange做数据分析契机实验手册目录orange软件部分界面展示小试牛刀:数据导入和展示小试牛刀:散点图绘制总结 契机 今天在上大数据时代实验课,作为一名软件工程专业的大三学生,在上这节公选课之前就决定这节课做完这个学期所有的实验报告,可以说“有亿点”不屑;尤其当老师说Python很麻烦的时候,我更是震惊了,因为我接触过这么多编程语言,Python真的很友好了,很傻瓜,但是当老师打开实验手册的时候,我真香了!!!下面先来看看手册的目录: 实验手册目录 为什么会真香呢,因为目录里这些有好多机器学习算法!

weixin_45880844的博客 1万+

javaApi JWT token生成以及验证

JWT简介 JSON Web token简称JWT, 是用于对应用程序上的用户进行身份验证的标记。也就是说, 使用 JWTS 的应用程序不再需要保存有关其用户的 cookie 或其他session数据。此特性便于可伸缩性, 同时保证应用程序的安全。 在身份验证过程中, 当用户使用其凭据成功登录时, 将返回 JSON Web token, 并且必须在本地保存 (通常在本地存储中)。 每当用户要访问受保护的路由或资源 (端点) 时, 用户代理(user agent)必须连同请求一起发送 JWT, 通常在授权标头

qq_46859110的博客 6885

【深度学习驱动流体力学】完整配置安装 OpenFOAM 及其所需的ThirdParty与QT5工具

针对以上文件及文件目录介绍其功能特性:Allclean:这是一个脚本或命令,通常用于清理(即删除)所有编译生成的临时文件和目标文件。执行后,可以将编译过程中生成的中间文件和已编译的程序删除,以便重新开始编译或者清理空间。Allwmake:这是一个脚本或命令,用于编译并安装ThirdParty-10目录中的所有软件包。执行此命令会遍历所有子目录,编译其中的软件包并将它们安装到指定位置。这是一个脚本或命令,用于编译和安装Libccmio库。

源代码杀手的博客 1998

自助结账商品检测(Scanned Item Detection)——基于YOLOv8的RPC数据集实战

RPC数据集是由中国科学院自动化研究所发布的零售商品结账检测公开数据集,广泛用于自助结账和零售场景下的目标检测与识别。YOLOv8是YOLO系列最新版本,由Ultralytics推出,继承了YOLO家族的高效快速和高准确性,适用于实时检测场景。本文系统介绍了基于YOLOv8的RPC数据集自助结账商品检测方案,涵盖数据准备、训练、推理及UI界面设计。未来,可结合多模态感知、RFID融合技术,打造更加智能和稳定的自助结账系统。

YOLO 251

基于JWT的用户token验证

文章摘要:本文对比分析了两种用户身份验证机制。基于Session的验证通过服务器端存储会话信息,客户端携带SessionID进行验证;JWT则采用Token机制,由服务器生成签名Token供客户端存储和携带。详细介绍了二者的工作流程、实现步骤及代码示例(包括Token生成、验证和接口测试),并探讨了JWT的失效管理和无感刷新等优化问题。两种方案各具特点,适用于不同应用场景。

码上悦读 1402

22、计算智能在自闭症检测与管理中的应用

本文探讨了计算智能在自闭症谱系障碍(ASD)检测与管理中的应用。在检测方面,结合可穿戴设备、传感技术与多模态数据(如眼动追踪、问卷、神经成像等),利用机器学习和深度学习算法提升诊断准确性,并介绍了多种公开数据集及研究方法。在管理方面,通过生理指标(HRV、GSR、呼吸频率)监测情绪状态,结合智能可穿戴设备与支持性应用平台(如LetMeTalk、MITA、Rethink Ed等),实现对ASD患者的实时干预与个性化支持。文章还展示了多模态筛查与管理流程的系统架构,强调未来技术整合与个性化服务的发展方向。

star的博客 91

SpringBoot集成JWT实现Token登录验证

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间安全地传输信息。它通常用于身份验证和信息交换,因为其紧凑且自包含的特性,使得它可以在不同的环境中轻松传递和验证。

等什么君!的博客 3338

(LDA新闻文本主题分析)基于 gensim训练LDA模型,进行新闻文本主题分析 完整代码+数据 可直接运行

(LDA新闻文本主题分析)基于 gensim训练LDA模型,进行新闻文本主题分析 完整代码+数据 可直接运行

机器学习深度学习业余选手 1498

QT-Creator安装教程(windows)

本文介绍了Qt的下载安装步骤:1)通过镜像源下载安装包;2)运行exe文件时使用命令行参数指定镜像地址;3)在安装过程中选择路径和自定义安装组件,包含QT5和QT6版本的详细安装说明;4)安装后可继续添加扩展包或卸载组件。重点提示了QT6必须勾选的关键组件,并提供了组件管理的操作方法。

qq_53545309的博客 3107

nodejs实战之 jwt生成token以及 验证

流程: 用户登录 在中间层node端 生成token,前端接收token,存放在本地,之后请求放在header带到后端。后端验证token是否正确。 1.首先引入依赖包: const jwt = require(‘jsonwebtoken’); 2. 然后截获前端登录请求,根据userId生成token //生成token generateToken(data) { i...

子非渔 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

基于JWT的token验证

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

lkl2017的博客 640

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring Boot 集成JWT实现Token验证详解

Token是一种令牌,它在用户登录后由服务器生成并返回给客户端,客户端在随后的请求中将Token附在HTTP请求头中,以此来验证用户的身份。Token通常包含了用户的身份信息和一些其他的元数据。JWT(Json Web Tokens)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在双方之间以JSON对象的形式安全地传输信息。每个Token都是经过数字签名的,因此可以被验证和信任。JWT可以使用秘密(对称加密)或使用RSA或ECDSA的公钥/私钥对(非对称加密)进行签名。

ning的博客 1998

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

JWT生成token和验证的简单实现

给客户提供数据接口时,要求使用jwt生成token实现token认证 首先引入依赖: <!-- JWT --> <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3....

优快云已弃用 3752
上一篇: 小程序支付 接入 EasyWeChat(6.X)
下一篇: 接入跨域中间件
Maybe I Simple
博客等级 码龄9年 36粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值