Laravel常用扩展sanctum与medoo的使用
安装 laravel/sanctum 扩展
1、下载sanctum扩展库
cd /usr/local/nginx/html/laravel/
composer require laravel/sanctum
#生成配置文件
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
2、为config/sanctum.php配置文件设置到期时间,sanctum是以分钟为单位
'expiration' => 60 * 2,
3、最后,你需要执行数据库迁移文件。Sanctum 将创建一个数据库表用于存储 API 令牌:
这一步生成存放token验证的数据表
php artisan migrate
4、在 app/Http/Kernel.php 文件中将 Sanctum 的中间件添加到你的 api 中间件组中:
use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;'api' => [EnsureFrontendRequestsAreStateful::class,'throttle:60,1',\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
使用sanctum进行token验证实例
参考文档:https://learnku.com/docs/laravel/7.x/sanctum/7510
1、创建user表模型,并继承sanctum的user类(app\Model\UserModel.php)
2、创建loginApi登录接口,用于生成token并将token存入redis缓存,并根据token失效时间’expiration’ => 60 * 2设置redis值的失效时间,因为sanctum是以分钟为单位,redis是以秒为单位需要乘60换算
3、通过获取头部信息在__construct获取缓存的用户信息,并通过userInfoApi接口返回获取用户详情
4、在路由加入auth:sanctum中间件保护路由,指定哪些接口访问需要使用到token验证的
token签名
1、实现逻辑app\Http\Controller\Test\IndexController.php
#引用User模型与缓存类
use App\Model\UserModel;
use Illuminate\Support\Facades\Cache;protected $s_user;public function __construct(Request $request){//登录成功后,访问其他方法时,获取请求头存放的token信息进行验证$BearerToken = $request->server('HTTP_AUTHORIZATION');$authToken =str_replace('Bearer ','',$BearerToken);//根据token值作为键名从redis缓存中获取用户详细信息$this->s_user =Cache::get($authToken);}# 创建loginApi登录接口,用于生成token并将token存入redis缓存,并根据token失效时间'expiration' => 60 * 2设置redis值的失效时间,因为sanctum是以分钟为单位,redis是以秒为单位需要乘60换算
public function loginApi(Request $request){$username = $request->post('username');$password = $request->post('password');$user = UserModel::where(['username' => $username, 'password' => md5($password)])->first();if (!$user) {return ['msg' => '该用户不存在'];}//1、删除api_personal_access_tokens表历史token信息,实现单点登录$user->tokens()->delete();//2、令牌创建后,应该立即向用户展示这个纯文本值$token = $user->createToken('login-token')->plainTextToken;//3、将token存入redis缓存,并根据token失效时间'expiration' => 60 * 2设置redis值的失效时间,因为sanctum是以分钟为单位,redis是以秒为单位需要乘60换算$minutes = config('sanctum.expiration');$token = explode('|',$token);Cache::put($token[1], $user, $minutes * 60);return ['data' => ['userinfo' => $user, 'token' => $token[1]]];}//获取通过header头传递的Bearer token从缓存中获取用户信息public function userInfoApi(){return $this->s_user;}
2、UserModel模型
<?phpnamespace App\Model;use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Sanctum\HasApiTokens;class UserModel extends Authenticatable
{use HasApiTokens;const CREATED_AT = 'create_time';const UPDATED_AT= 'update_time';protected $table = 'user';protected $fillable = ['username','password','head_url','admin','is_delete','status'];
}
3、路由使用
在路由加入auth:sanctum保护路由,指定哪些接口访问需要使用到token验证的
Route::group(['namespace' => 'Test', 'prefix' => 'test'], function () {Route::any('login', 'IndexController@loginApi');#用中间件做token验证,放入一下的路由都需要通过token验证Route::group(['middleware'=>'auth:sanctum'], function (){/*Route::any('userinfo', function(Request $request){//return $request->server();//$user = \App\Model\UserModel::first();//return $user;});*/Route::any('userinfo', 'IndexController@userInfoApi');});
});
4、展示
a、生成token签名
b、通过签名访问用户信息接口
或者
c、通过redis服务端查看存入的token信息
安装 catfan/medoo扩展
官方使用文档:
https://medoo.lvtao.net/1.2/doc.collaboration.php
cd /usr/local/nginx/html/laravel/
composer require catfan/medoo
使用medoo库:
1、配置bootstrap/app.php
#在bootstrap/app.php中注册
use Illuminate\Support\Facades\Config;
use Medoo\Medoo;// Register as database
$app->singleton(Illuminate\Contracts\Debug\ExceptionHandler::class,App\Exceptions\Handler::class
);
$app->singleton('medoo', function () {$config = Config::get('database.connections.mysql');return new Medoo(['database_type' => $config['driver'],'database_name' => $config['database'],'server' => $config['host'],'charset' => $config['charset'],'port' => $config['port'],'prefix' => $config['prefix'],'username' => $config['username'],'password' => $config['password'],]);
});
2、配置.env下的数据库和redis配置
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=rootBROADCAST_DRIVER=log
CACHE_DRIVER=redis
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120REDIS_HOST=127.0.0.1
REDIS_PASSWORD=123456
REDIS_PORT=6379
3、配置config/database.php数据库前缀配置
'prefix' => 'api_',
测试medoo查询数据库
在routes/api.php写入查询路由
Route::any('/medoo', function(){$arr = app('medoo')->select('user','*');return $arr;
});
实例:medoo实现分页查询接口
public function pageApi(Request $request){$page = $request->post('page', 1);$pageSize = $request->post('page_size', 10);$param = $request->post();$where = [];$where['is_delete'] = 0;if (!empty($param['username'])) {$where['username[~]'] = $param['username'];}if (!empty($param['status']) && in_array($param['status'], [1, 2])) {$where['status'] = $param['status'];}if (isset($param['admin']) && in_array($param['admin'], [0, 1])) {$where['admin'] = $param['admin'];}$total = $this->medoo->count('user', 'id', $where);if ($total == 0) {return ['total' => 0, 'data' => []];}$where['LIMIT'] = [($page - 1) * $pageSize, $pageSize];$where['ORDER'] = ['id' => 'DESC'];$data = $this->medoo->select('user', ['id','username', 'password', 'head_url', 'status'], $where);return ['total' => $total, 'data' => $data];}
数据库表结构
CREATE TABLE `api_user` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`username` varchar(20) NOT NULL,`password` varchar(50) NOT NULL,`head_url` char(150) NOT NULL COMMENT '头像',`admin` tinyint(4) NOT NULL DEFAULT '0',`time` int(11) unsigned NOT NULL,`is_delete` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '0:未删除,1:已删除',`status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '状态 1:启用, 2:禁用',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
Laravel常用扩展sanctum与medoo的使用相关推荐
- 【php-laravel框架】第二节:laravel常用的扩展包汇总及安装教程
教程说明:laravel的常用扩展包汇总及安装方式. 使用版本:laravel5.5 lts版本 集成环境:phpstudy[windows推荐].宝塔windows面板[linux推荐] IDEA编 ...
- js中String的常用扩展
js中String的常用扩展,包括trim,检查中文,url,emal,电话号码,转类型,格式化代码等 //去掉字符串空间调用方式 字符串.trim() String.prototype.trim = ...
- Python常用扩展包
一. Python常用扩展包 参考张良均的<Python数据分析与挖掘实战>,下图展示了常见的Python扩展包. 常用的包主要包括: 1.Numpy ...
- WebAPi添加常用扩展方法及思维发散
前言 在WebAPi中我们通常需要得到请求信息中的查询字符串或者请求头中数据再或者是Cookie中的数据,如果需要大量获取,此时我们应该想到封装一个扩展类来添加扩展方法,从而实现简便快捷的获取. We ...
- distinct返回null报错_C#之集合常用扩展方法与Linq
一.集合的常用扩展方法(lambda的方式) 1.Where() 根据条件选择数据 2.Select() 根据数据条件转换成新的数据类型,类似于DTO转换类 3.Max() 根据条件选择最大值 4.M ...
- Laravel 开发扩展包基本流程
介绍 在Laravel中就有Laravel Composer Package开发的相关介绍 这其中需要运用 Service Providers 当然对于我们Laravel开发人员 来说 开发一个扩展包 ...
- php7扩展开发教程,Laravel 7 扩展开发教程
下面由Laravel入门教程栏目给大家介绍Laravel 7 扩展开发教程,希望对需要的朋友有所帮助! 步骤 1. 创建一个新项目 我更喜欢使用 Laravel 安装程序.laravel new la ...
- Laravel Debugbar 扩展包安装及使用教程
1.简介 Laravel Debugbar在 Laravel 5 中集成了PHP Debug Bar用于显示调试及错误信息以方便开发.该扩展包包含了一个 ServiceProvider 用于注册调试条 ...
- 二.Laravel5.6教程之——Laravel Debugbar扩展
为什么要安装laravel debugbar扩展呢?目的就是为了显示调试及错误信息以方便开发.注意该扩展只能在开发环境中使用,在正式环境中需移除该扩展. 1.安装 我们这里使用composer安装该扩 ...
最新文章
- 名人尿炕被人发现后怎么办?
- Getting Installation aborted (Status 7) ApplyParsePerms: lsetfilecon of /syst...【转】
- Day 62 Django第三天
- JavaScript 字典类
- 【微学堂】线上Linux服务器运维安全策略经验分享
- BestCoder4 1002 Miaomiao's Geometry (hdu 4932) 解题报告
- 程序员为什么 365 天背电脑包?这答案我服!
- mysql 增加分区_mysql在原有表的基础上添加分区
- vue思维导图(这是我在b站老师下载资源里的讲课流程,用来复习和整体把握还不错)
- FFmpeg编码详细流程
- 计算机二级题库access选择题_计算机二级access选择题题库
- 深度测试oppo软件,OPPO深度测试
- android studio代理设置
- 模拟人生java版攻略_模拟人生免费版简易攻略小技巧
- WPF随笔(四)--窗口多屏显示及全屏
- 82个加密数字货币遭交易所下线,全球区块链ICO代币进入强监管
- storm windows 机制
- K8S 数据卷volumes之Secret
- m4a转如何快速转换为wav格式呢
- 解决caffe2最新编译问题,亲测有效!