jwt laravel 使用 jwttoken解析token jwt生成token jwt令牌验证

本文介绍jwt token在laravel中的安装使用,解决token验证的问题

一、查看laravel版本选定适合自己框架的jwt版本,不同版本之间会有意想不到的惊喜(坑)

根据自己 laravel版本不同使用jwt-auth版本建议如下:

Laravel version jwt-auth version
4.* 0.3.* 0.4.*
5.* && <5.5 0.5.*
5.* 1.0.*

以上只是参考,本人在laravel5.4也成功使用了1.0.0-rc.3版本下面详细描述下具体的安装以及使用

通过composer安装的两种方式

1>composer require tymon/jwt-auth 1.0.0-rc.3(本人使用的版本)直接在项目目录下执行该命令等待安装即可

2>打开composer.json在require中添加如下,然后执行composer update即可,但是这样会把composer.json中其他的扩展也一并更新了

"require": {

"tymon/jwt-auth": "1.0.0-rc.3"

},

将jwt加载到项目中之后进行一下配置首先

执行命令:

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"该命令的含义是发布jwt的配置文件,文件位置存储在config下该文件中存储了一系列的jwt的配置例如生存时间,token刷新时间等等创建之后执行命令
php artisan jwt:secret,该命令为创建jwt secret秘钥在,env文件中可以看到

然后在服务容器中创建jwt的服务提供者打开config/app.php在‘providers‘数组中添加

Tymon\JWTAuth\Providers\LaravelServiceProvider::class,或者该版本指定的添加服务提供者之后在该文件下aliases中添加门面

‘JWTAuth‘ => Tymon\JWTAuth\Facades\JWTAuth::class,

‘JWTFactory‘ => Tymon\JWTAuth\Facades\JWTFactory::class,

添加门面之后在控制器中使用时可以直接 use JWTAuth;

要想使得我们每次的接口都经受token的验证可以借助中间件,要使用中间件需要在app\Http\Kernel.php文件中的

$routeMiddleware数组中添加如下:

// jwttoken 中间件

‘jwt.auth‘ => \Tymon\JWTAuth\Http\Middleware\Authenticate::class,(该中间件则按照token规则验证)

‘jwt.refresh‘ => \Tymon\JWTAuth\Http\Middleware\RefreshToken::class,(该中间件表示请求一次token就失效了)

添加好以上配置之后我们着手控制器和模型

在模型中

use Tymon\JWTAuth\Contracts\JWTSubject;class User extends Authenticatable implements JWTSubject并且添加以下方法
public function getJWTIdentifier() {    return $this->getKey();}public function getJWTCustomClaims() {    return [];}然后需要更改下我们的auth.php配置文件因为在路由时要指定何种验证方式
‘guards‘ => [    ...    ‘api‘ => [        ‘driver‘ => ‘jwt‘,        ‘provider‘ => ‘users‘,    ],],更改之后路由中要这样才能生效
Route::middleware(‘jwt.auth‘)->get(‘users‘, function () {    return auth(‘api‘)->user();});这样路由就能经过指定的中间件jwt.auth过滤,然后经auth(‘api)这里指定了验证方式就是对应刚刚讲到的auth.php中的配置项如果你想让token的验证信息更加温暖,那么你可以捕获token验证的异常具体做法打开文件app/Exceptions/Handler.phprender方法开头使用如下代码
use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
if ($exception instanceof UnauthorizedHttpException) {    $preException = $exception->getPrevious();    if ($preException instanceof                  \Tymon\JWTAuth\Exceptions\TokenExpiredException) {        return response()->json([‘error‘ => ‘TOKEN_EXPIRED‘]);    } else if ($preException instanceof                  \Tymon\JWTAuth\Exceptions\TokenInvalidException) {        return response()->json([‘error‘ => ‘TOKEN_INVALID‘]);    } else if ($preException instanceof             \Tymon\JWTAuth\Exceptions\TokenBlacklistedException) {         return response()->json([‘error‘ => ‘TOKEN_BLACKLISTED‘]);   }   if ($exception->getMessage() === ‘Token not provided‘) {       return response()->json([‘error‘ => ‘Token not provided‘]);   }}每一error都能自定义你自己的提示语下面是获取token的方法在控制器中使用use JWTAuth;读取到用户信息将用户信息作为参数例如

$data={‘mobile‘:12345667,‘password:2342342}

$token = JWTAuth::fromUser($data);

这样就能拿到token

如果我们想解析token可以使用

JWTAuth::user()

该方法可以将验证通过的用户信息全部提取出来

 

 
 

原文地址:https://www.cnblogs.com/mzli/p/10637214.html

时间: 2024-11-11 02:38:27

jwt laravel 使用 jwttoken解析token jwt生成token jwt令牌验证的相关文章

从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之七使用JWT生成Token(个人见解)

在 上一篇中讲到了在NetCore项目中如何进行全局的请求模型验证,只要在请求模型中加了验证特性,接口使用时只用将数据拿来使用,而不用去关系数据是否符合业务需求. 这篇中将讲些个人对于JWT的看法和使用,在网上也能找到很多相关资料和如何使用,基本都是直接嵌到  Startup 类中来单独使用.而博主是将jwt当做一个验证方法来使用.使用起来更加方便,并且在做验证时也更加的灵活. 1.什么是JWT? Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON

Token_使用JWT生成token

使用token替换session保存信息,防篡改 1.token三部分 header   { "typ": "JWT", "alg": "HS256"   } payload  { "iss": "ninghao.net", "exp": "1438955445", "name": "wanghao", &q

Java开源生鲜电商平台-Java后端生成Token架构与设计详解(源码可下载)

Java开源生鲜电商平台-Java后端生成Token架构与设计详解(源码可下载) 目的:Java开源生鲜电商平台-Java后端生成Token目的是为了用于校验客户端,防止重复提交. 技术选型:用开源的JWT架构. 1.概述:在web项目中,服务端和前端经常需要交互数据,有的时候由于网络相应慢,客户端在提交某些敏感数据(比如按照正常的业务逻辑,此份数据只能保存一份)时,如果前端多次点击提交按钮会导致提交多份数据,这种情况我们是要防止发生的. 2.解决方法: ①前端处理:在提交之后通过js立即将按钮

什么是token及怎样生成token

什么是token Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码. 基于 Token 的身份验证 使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录.流程是这样的: 客户端使用用户名跟密码请求登录 服务端收到请求,去验证用户名与密码 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端 客户

生成token

利用中间件生成token 1.安装中间件 npm install jsonwebtoken 2. 使用 Sign() 里面有3个参数,第一个是token里面传递的数据    ,第二个是 key ,第三个是过期s时间 const payload = { id: user.id, name: user.name, avatar: user.avatar }; const token = jwt.sign(payload, keys.secretOrKey, { expiresIn: 3600 });

Java实现token的生成与验证-登录功能

一.token与cookie相比较的优势1.支持跨域访问,将token置于请求头中,而cookie是不支持跨域访问的: 2.无状态化,服务端无需存储token,只需要验证token信息是否正确即可,而session需要在服务端存储,一般是通过cookie中的sessionID在服务端查找对应的session: 3.无需绑定到一个特殊的身份验证方案(传统的用户名密码登陆),只需要生成的token是符合我们预期设定的即可: 4.更适用于移动端(Android,iOS,小程序等等),像这种原生平台不支

Atitit.注解and属性解析(2)---------语法分析 生成AST attilax总结 java .net

Atitit.注解and属性解析(2)---------语法分析 生成AST  attilax总结  java .net 1. 应用场景:::因为要使用ui化的注解 1 2. 使用解释器方式来实现生成AST 1 3. 识别TerminalExpression和NonterminalExpression 2 1.1. 单词流必须识别为保留字,标识符(变量),常量,操作符(运算符 )和界符五大类 2 1.2. 操作符(运算符 )::: 2 4. 生成括号操作符表达式 2 5. 逗号操作符表达式 5

ASP.NET OAuth:access token的加密解密,client secret与refresh token的生成

在ASP.NET OWIN OAuth(Microsoft.Owin.Security.OAuth)中,access token 的默认加密方法是: 1) System.Security.Cryptography.DpapiDataProtector.Protect() 2) Convert.ToBase64String() 3) .TrimEnd('=').Replace('+', '-').Replace('/', '_'); access token 的默认解密方法是: 1) System

基于oracle SQL Developer Data Modeler建模工具,解析xml,生成etljet代码

今天准备在 @zhangkai05 写的小工具model_sql基础上,进一步完善功能,使其更加自动化.方便建模人员开发etl任务. 源代码更改后 ,会发布到 git(url地址)上,逐步完善. 描述现状及问题 团队 数据仓库建模在2013年下开始使用 oracle sql developser datamodeler建模工具,之前一直用 powerdesigner,但由于后者是商业收费软件,公司又不打算购买.故经过调研,转向oracle建模工具.虽然其 易用性与 power designer