laravel8 JWT配置

一、安装JWT

composer require tymon/jwt-auth

二、config/app.php 注册服务提供者

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

三、发布生成配置文件

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

四、生成 JWT_SECRE(执行后会在.env 中自动生成:JWT_SECRET=**************)

php artisan jwt:secret

五、config/auth.php 中配置 guards

'guards' => ['web' => ['driver' => 'session','provider' => 'users',],'jf_api' => ['driver' => 'jwt','provider' => 'user',],],
'providers' => [//这里的users就是上面api中的provider的值users'user' => ['driver' => 'eloquent','model' => App\Models\Api\User::class,//注意这里的路径,我的api在Api目录下],],

六、新建 App\Models\Api\User 模型类,注意要继承 Authenticatable 并且 是JWTSubject 接口的实现

<?phpnamespace App\Models\Api;use App\Traits\SerializeDate;
use DateTimeInterface;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Tymon\JWTAuth\Contracts\JWTSubject;class User extends Authenticatable implements JWTSubject
{use HasFactory, Notifiable, SerializeDate;/*** 关联到模型的数据表** @var string*/protected $table = 'user';public $timestamps = false;//格式化输出时间protected function serializeDate(DateTimeInterface $date){return $date->format('Y-m-d H:i:s');}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 [];}}
<?phpnamespace App\Traits;use DateTimeInterface;trait SerializeDate
{/*** 为 array / JSON 序列化准备日期格式** @param  \DateTimeInterface  $date* @return string*/protected function serializeDate(DateTimeInterface $date){return $date->format('Y-m-d H:i:s');}
}

七、注册路由 JWT 认证扩展包附带了允许我们使用的中间件。在 app/Http/Kernel.php 中注册 auth.jwt 中间件

protected $routeMiddleware = [....'auth.jf.api' => \App\Http\Middleware\myMiddleware\AuthApi::class,
];
<?php
namespace App\Http\Middleware\myMiddleware;use Closure;class AuthApi{/*** 前台登陆鉴权* @param  \Illuminate\Http\Request  $request* @param  \Closure  $next* @return mixed*/public function handle($request, Closure $next){$admin = auth('api')->user();if (!$admin) {apiError('请先登录','',401);}return $next($request);}
}

八、创建api路由

<?php
use Illuminate\Support\Facades\Route;Route::prefix('user')->middleware(['auth.jf.api'])->group(function (){Route::get('/register', [\App\Http\Controllers\Api\UserController::class, 'register']);
});Route::prefix('index')->group(function (){Route::get('/index', [\App\Http\Controllers\Api\IndexController::class, 'index']);
});

九、控制器使用

php artisan make:controller Api\UserController
<?phpnamespace App\Http\Controllers\Api;use App\Http\Requests\UserRequests;
use App\Models\Api\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;//php artisan make:controller Api\UserController/*** 用户控制器* Class User* @package App\Http\Controllers\Api*/
class UserController extends Base
{public function register(Request $request, UserRequests $userRequests){$data=$request->all();$insertData['salt']=Str::random(4);$insertData['phone'] = $data['phone'];$insertData['password']=md5($data['password'].$data['salt']);$insertData['create_time'] = date("Y-m-d H:i:s",time());User::create($data);apiSuccess($data);}public function login(Request $request){$input = $request->only('account', 'password');//此处可以自己查数据库,判断是否用户名和密码正确$user = User::query()->where(['account' => $input['account']])->firstOrFail();//生成token$token = Auth::guard('jf_api')->fromUser($user);return response()->json(['success' => true,'token' => $token,'user' => $user,]);}public function logout(Request $request){Auth::guard('jf_api')->invalidate();return response()->json(['success' => true,'msg' => "退出成功"]);}public function refresh(Request $request){$newtoken=Auth::guard('jf_api')->refresh();return response()->json(['success' => true,'msg' => "token已刷新","token"=>$newtoken]);}public function user(Request $request){//两种方式都行$user = Auth::guard('jf_api')->user();//$user = JWTAuth::authenticate();return response()->json(['success' => true,'user' => $user,]);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop 客户端 FileSystem加载过程

如何使用hadoop客户端 public class testCreate {public static void main(String[] args) throws IOException {System.setProperty("HADOOP_USER_NAME", "hdfs");String pathStr "/home/hdp/shanshajia";Path path new Path(pathStr);Confi…

AWS安全性身份和合规性之Amazon Detective

分析和直观呈现安全数据&#xff0c;以调查潜在的安全问题。 Amazon Detective使您可以更轻松地分析、调查和快速确定潜在安全问题或可疑活动的根本原因。Amazon Detective会自动从您地AWS资源中收集日志数据并使用机器学习、统计分析和图论来构建一组关联的数据&#xff0c;使…

在DAYU200上实现OpenHarmony跳转拨号界面

一、简介 日常生活中&#xff0c;打电话是最常见的交流方式之一&#xff0c;那么如何在OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&#xff09;中进行电话服务相关的开发呢&#xff1f;今天我们可以一起来了解一下如何通过电话服务系统支持的API实现拨打电话的功能…

ECMAScript 详解

ECMAScript 是一种脚本语言规范&#xff0c;由欧洲计算机制造商协会&#xff08;ECMA&#xff09;通过 ECMA-262 标准化&#xff0c;广泛用于客户端脚本编程。它最著名的实现是 JavaScript&#xff0c;主要用于 Web 开发。以下是 ECMAScript 的详细解析&#xff1a; ### 1. 历…

C#中System.Threading.Timer的使用

文章速览 概述创建计时器对象循环执行的方法停止计时器参考文章 坚持记录实属不易&#xff0c;希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区&#xff01; 谢谢~ 概述 本文着重于System.Threading.Timer的简单使用方法。 由于在实际开发过程中&…

LabVIEW机械臂自动化在精密制造中的应用

精密制造是现代工业中的关键环节&#xff0c;要求高精度、高效率以及一致性。机械臂自动化技术结合LabVIEW软件&#xff0c;提供了强大的控制、数据处理和用户界面设计能力&#xff0c;使其在精密制造中得到了广泛应用。以下是几个具体的应用实例&#xff1a; 1. 电路板焊接 …

C#-根据日志等级进行日志的过滤输出

文章速览 概要具体实施创建Log系统动态修改日志等级 坚持记录实属不易&#xff0c;希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区&#xff01; 谢谢~ 概要 方便后期对软件进行维护&#xff0c;需要在一些关键处添加log日志输出&#xff0c;但时间长…

【408精华知识】指令周期的数据流

文章目录 一、取指周期二、间址周期三、执行周期&#xff08;一&#xff09;数据传送类指令(mov/load/store)&#xff08;二&#xff09;运算类指令(加/减/乘/除/移位/与/或)&#xff08;三&#xff09;转移类指令(jmp/jxxx) 四、中断周期 CPU每取出并且执行一条指令所需要的全…

二叉数之插入操作

首先是题目 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 注意&#xff0c;可能存在多种有效…

AcWing 217:绿豆蛙的归宿 ← 搜索算法

【题目来源】https://www.acwing.com/problem/content/219/【题目描述】 给出一个有向无环的连通图&#xff0c;起点为 1&#xff0c;终点为 N&#xff0c;每条边都有一个长度。 数据保证从起点出发能够到达图中所有的点&#xff0c;图中所有的点也都能够到达终点。 绿豆蛙从起…

thinkphp 使用模型实现多表连接查询

解决问题&#xff0c;多张表的查询连接问题&#xff0c;3张表及以上 爷爷表 有字段id 爸爸表 有字段id&#xff0c;grandfather_id 儿子表 id,parent_id 控制器中编写 public function getdata(){ $data model(爷爷表)->with([father.son])->select(); var_dump($data…

Kreon: An Efficient Memory-Mapped Key-Value Store for Flash Storage——论文泛读

TOS 2021 Paper 论文阅读笔记整理 问题 持久的键值存储已经成为现代数据处理系统的数据访问路径中的一个主要组件。然而&#xff0c;它们表现出较高的CPU和I/O开销。 基于LSM Tree的键值存储中两个重要的CPU和I/O开销来源是&#xff1a; 在LSM Tree中使用压缩&#xff0c;不…

若依解决使用https上传文件返回http路径问题

若依通过HTTPS请求进行文件上传时却返回HTTP的文件链接地址&#xff0c;主要原因是使用了 request.getRequestURL 获取链接地址。 解决办法&#xff1a; 在nginx配置文件location处加上&#xff1a;proxy_set_header X-Forwarded-Scheme $scheme; 然后代码通过request.getHea…

MobaXterm下载虚拟机SSH链接超时解决(保姆级踩坑)

文章目录 为啥要用MobaXtermMobaXterm下载打开虚拟机ssh链接ssh连接失败排查linux配置windows配置 到这了&#xff0c;什么都干了&#xff0c;怎么还不成功&#xff1f; 更多相关内容可查看 在一个阳光明媚的下午&#xff0c;开启了无限踩坑的旅程 为啥要用MobaXterm 作为小编…

DockerNetwork

Docker Network Docker Network 是 Docker 引擎提供的一种功能&#xff0c;用于管理 Docker 容器之间以及容器与外部网络之间的网络通信。它允许用户定义和配置容器的网络环境&#xff0c;以便容器之间可以相互通信&#xff0c;并与外部网络进行连接。 Docker Network 提供了以…

【ARFoundation自学03】AR Point Cloud 点云(参考点标记)功能详解

和平面识别框架一样 1为XR Origin添加AR Point Cloud Manager组件 然后你的ar应用就具备了点云识别功能&#xff0c;就这么简单 2.可视化这些云点 创建一个美术效果的预制体&#xff0c;人家提供了预设模板 然后拖到仓库&#xff08;ASSETS&#xff09;创建预制体&#xff…

Java设计模式-中介者模式(20)

中介者模式(Mediator Pattern)是行为设计模式之一,它旨在通过定义一个中介对象来封装多个对象之间的交互关系,从而使这些对象不必相互引用,从而降低系统的耦合度并提高可维护性。在Java中实现中介者模式时,主要遵循以下步骤和组件: 核心概念 中介者(Mediator):定义一…

满足a==1a==2

网上看到的一道JS面试题&#xff0c;觉得很有意思 觉得很有意思的原因是&#xff0c;这个式子乍看之下是有些反常识的。“a1&&a2”&#xff0c;它的意思似乎是“a在等于1的同时又等于2”&#xff0c;这时我们的第一反应可能就是不成立&#xff0c;一个变量怎么可能同时…

前端 MVC 分层的实践

目录 前言 并未过时的 MVC MVC 的由来 不同版本的 MVC 苹果版本 微软版本 阮一峰版 原生 JS 实现 MVC Model View Controller React 中的 MVC 其他分层 Service format utils 目录 总结 前言 前面我们讲了 JavaScript 面向对象编程&#xff0c;这篇文章我们会…

深度学习——图像分类(CNN)—训练模型

训练模型 1.导入必要的库2.定义超参数3.读取训练和测试标签CSV文件4.确保标签是字符串类型5.显示两个数据框的前几行以了解它们的结构6.定义图像处理参数7.创建图像数据生成器8.设置目录路径9.创建训练和验证数据生成器10.构建模型11.编译模型12.训练模型并收集历史13.绘制损失…