Laravel使用JWT

news/2024/11/30 20:38:08/

开始安装jwt

(本次安装不建议直接在项目中安装及使用)

1.composer 安装jwt

composer require tymon/jwt-auth 1.0.0-rc.1

2.在config 文件夹的app.php 中注册服务提供者

'providers' => [Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
]'aliases' => ['JWTAuth'=> Tymon\JWTAuth\Facades\JWTAuth::class,'JWTFactory'=> Tymon\JWTAuth\Facades\JWTFactory::class,
]

3.生成配置文件

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

4.生成jwt 密钥

php artisan jwt:secret

然后会在我们的 .env 文件中生成jwt密钥

5.在auth.php 文件中 配置 auth guard 让api的driver使用jwt

'guards' => ['web' => ['driver' => 'session','provider' => 'users',],'api' => ['driver' => 'jwt',//更改此处为jwt'provider' => 'users',],],

6.更改 User model使其支持 jwt-auth

<?phpnamespace App;use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;class User extends Authenticatable implements JWTSubject
{use Notifiable;protected $table = 'users';/*** Get the identifier that will be stored in the subject claim of the JWT.** @return mixed*/public function getJWTIdentifier(){return $this->getKey();}/*** Return a key value array, containing any custom claims to be added to the JWT.** @return array*/public function getJWTCustomClaims(){return [];}

7.配置 中间件

在 Middleware 文件夹下新建 ApiAuth.php 中间件文件

<?phpnamespace App\Http\Middleware;use Closure;
use Tymon\JWTAuth\Facades\JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
use Tymon\JWTAuth\Exceptions\TokenInvalidException;class ApiAuth
{/*** Handle an incoming request.** @param  \Illuminate\Http\Request  $request* @param  \Closure  $next* @return mixed*/public function handle($request, Closure $next){try {if (! $user = JWTAuth::parseToken()->authenticate()) {  //获取到用户数据,并赋值给$userreturn response()->json(['errcode' => 1004,'errmsg' => '无此用户'], 404);}return $next($request);} catch (TokenExpiredException $e) {return response()->json(['errcode' => 1003,'errmsg' => 'token 过期' , //token已过期]);} catch (TokenInvalidException $e) {return response()->json(['errcode' => 1002,'errmsg' => 'token 无效',  //token无效]);} catch (JWTException $e) {return response()->json(['errcode' => 1001,'errmsg' => '缺少token' , //token为空]);}}
}

注册中间件 在 Kernel.php 中注册中间件 并设置别名

 protected $routeMiddleware = ['api.auth' => \App\Http\Middleware\ApiAuth::class,];

到此你的jwt就算安装配置完成了

**基本使用**

1.新建AuthCtorller.php 控制器

php artisan make:controller AuthController

2.编辑 测试控制器

<?phpnamespace App\Http\Controllers;use App\User;
use Illuminate\Http\Request;
use Tymon\JWTAuth\Facades\JWTAuth;
use Illuminate\Support\Facades\Hash;class AuthController extends Controller
{/*** jwt 测试*///登录public function login(Request $request){$username = $request->get('username');$password = $request->get('password');$user_mes = User::where('username','=',$username)->first();if (!$user_mes || !Hash::check($password, $user_mes->password)) {return "账号或密码错误";}$token=JWTAuth::fromUser($user_mes);//生成tokenif (!$token) {return "登录失败,请重试";}return response()->json(['token'=>$token]);}//获取用户信息public function home(){$user=JWTAuth::parseToken()->touser();//获取用户信息return $user;}//退出public function logout(){JWTAuth::parseToken()->invalidate();//退出return '退出成功';}}

3.编辑路由

<?php
Route::post('/login','AuthController@login');//登录
Route::group(['middleware' => 'api.auth'], function () {Route::post('/home','AuthController@home');//获取用户信息Route::post('/logout','AuthController@logout');//退出});

配置JWT过期时间

config/jwt.php

token过期刷新

public function refresh(){try {// 获取旧token$old_token = JWTAuth::getToken();// 刷新token$token = JWTAuth::refresh($old_token);// 使老的token无效JWTAuth::invalidate($old_token);return response()->json(['token' => $token,]);} catch (JWTException $JWTException) {// 如果捕获到此异常,即代表 refresh 也过期了,用户无法刷新令牌,需要重新登录。throw new UnauthorizedHttpException('jwt-auth', $JWTException->getMessage());}}


http://www.ppmy.cn/news/47525.html

相关文章

使用计算机视觉实战项目精通 OpenCV:6~8

原文&#xff1a;Mastering OpenCV with Practical Computer Vision Projects 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 计算机视觉 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 当别人说你没有底线…

01、Cadence使用记录之新建工程与基础操作(原理图绘制:OrCAD Capture CIS)

01、Cadence使用记录之新建工程与基础操作&#xff08;原理图绘制&#xff1a;OrCAD Capture CIS&#xff09; 硕士学电磁场去了&#xff0c;写点博客记录下学习过程。 参考的教程是B站的视频&#xff1a;allegro软件入门视频教程全集100讲 本科的时候就对Cadence有所耳闻&am…

docker问题集锦

1.http: server gave HTTP response to HTTPS client sudo vim /etc/docker/daemon.json 添加{“insecure-registries”: [“ip:端口”]} sudo service docker restart 无效 sudo vim /lib/systemd/system/docker.service 在ExecStart最后添加 --insecure-registry ip:端口 sud…

GDB调试实验

一、实验准备 在 Linux 环境软件开发中&#xff0c;GDB 是调试 C 和 C 程序的主要工具。本次实验围绕着GDB常用的调试操作进行。 1、设置断点的意义 当我们想查看变量内容&#xff0c;堆栈情况等等&#xff0c;可以指定断点。程序执行到断点处会暂停执行。break 命令用来设置…

亚马逊、ebay、temu如何提升产品点击率?测评自养号解析

产品点击率对于店铺销售额的影响至关重要&#xff0c;尤其是在竞争越来越激烈的市场环境中&#xff0c;想要有销量和转化&#xff0c;提高产品listing点击率成为了非常关键的一环。 1. 产品主图 顾客浏览产品时&#xff0c;第一眼看到的就是主图&#xff0c;一张优质的主图更容…

什么是MVVM?

MVVM 是 Model-View-ViewModel 的缩写&#xff0c;是M-V-VM三部分组成。它本质上就是MVC的改进版。 M&#xff1a;Model 代表数据模型&#xff0c;也可以在Model中定义数据修改和操作的业务逻辑。 V&#xff1a;View 代表视图UI&#xff0c;它负责将数据模型转化成UI 展现出来。…

材料科学基础学习指导-吕宇鹏-名词和术语解释-第5章:相图

目录 第一部分 第二部分​​​​​​​ 第三部分 第四部分​ 第一部分 1.1组元&#xff1a;是材料科学中的基本术语。意思是组成合金的独立的、最基本的单元。 1.2相&#xff1a; 指合金中具有同一聚集状态、同一晶体结构和性质并以界面相互隔开的均匀组成部分。​​​​…

api数据接口文档_接口文档示例(Taobao/jd/pinduoduo/开放接口调用)

api数据接口文档_接口文档示例 本文主要是提供了一个接口文档的范文&#xff0c;内容修订历史、目录、时序图、接口要素描述、接口说明、使用示例、字典、FAQ。 使用MD格式文档&#xff08;makedown&#xff09;&#xff0c;选择原因&#xff0c;容易格式转换&#xff0c;开发…