IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> laravel8 passpord 认证 接口 小程序通用 -> 正文阅读

[PHP知识库]laravel8 passpord 认证 接口 小程序通用

1.配置password

安装插件

composer require laravel/passport

2.执行迁移文件 生成数据表 正常有五张数据表

php artisan migrate

3.生成授权码 注:secret保存起来

php artisan passport:install

4.修改接口账号模型

<?php

namespace App\Models;

use App\Observers\UserObserver;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
//api验证方法 passpord认证引入这个
use Laravel\Passport\HasApiTokens;
//注意passpord 需要与auth登录 配合使用 所以也要使用auth
use Illuminate\Foundation\Auth\User as AuthUser;

class UserPort extends AuthUser
{
    use HasFactory,HasApiTokens;
    protected $table = 'user_port';
    protected $guarded = [];
    

    //观察类与passpord认证无关
    protected static function boot()
    {
        parent::boot(); // TODO: Change the autogenerated stub
        //注册观察类
        self::observe(UserObserver::class);
    }

}

?5.修改config/auth.php文件中的api配置

注意!!! driver 必须改为passpord 默认为session

//guards 内部

'api' => [
            'driver' => 'passport',
            'provider' => 'UserPort',
        ],

6.令牌有效期

?在app/Proivders/AuthServiceProvide.php文件中的boot方法添加有效期

public function boot()
    {
        $this->registerPolicies();
        //设置token认证有效期为2小时
        Passport::tokensExpireIn(now()->addHour(2));
        //刷新token有效期为30天
        Passport::refreshTokensExpireIn(now()->addDay(30));
        //设置令牌过期时间(不写默认为一年)
        Passport::personalAccessTokensExpireIn(now()->addSecond(500000));
    }

7.解决auth在接口中登录没有attempt问题

前面

       //这里为解决方法 
       'apiweb' => [
            'driver' => 'session',
            'provider' => 'UserPort',
        ],
        //这里为前面添加进来的

        'api' => [
            'driver' => 'passport',
            'provider' => 'UserPort',
        ],

8.最后执行登陆 登录成功生成token

//测试生成token
    public function login(Request $request)
    {

//        自己生成的客户端授权码
//        JvLOWJsZ4Zovz2uAgQbCexix98oPaM7lPFEADzjT
//        0idPMCbVo4htxBOXYXZHldbVLH8Qx7Tbma6EFqXN

        //auth登录
        $boolResult = auth()->guard('apiweb')->attempt($request->all());

        if ($boolResult)
        {
            //用户模型对象
            $userModel = auth()->guard('apiweb')->user();

            //从模型中拿出当前用户的点击次数 就是数据库字段
            if($userModel->click > env('APINUM'))
            {
                return response()->json(['status'=>1002,'msg'=>'当天请求次数超过限制'],500);
            }
            //生成token
            $token = $userModel->createToken('api')->accessToken;

            //让当前用户数据库登陆次数加一
            $userModel->increment('click');

            $data = [
                'expire'=>7200,
                'token'=>$token
            ];

                return response()->json($data);

        }
                return response()->json(['ststus'=>1001,'msg'=>'登陆失败'],401);

    }

9.jwt中间件认证 成功返回token 存入缓存

//这里的中间件前面的过程已经自己创建好了 直接调用就好   下面的路由不用在意
Route::group(['middleware'=>'auth:api'],function (){

    //登录认证是否有中间件
    Route::post('loignDo',[\App\Http\Controllers\ApiController::class,'loginDo'])->name('loignDo');
    //用户授权信息入库
    Route::post('userAuth',[\App\Http\Controllers\ApiController::class,'userAuth'])->name('userAuth');
    //获取用户基本信息
    Route::post('userData',[\App\Http\Controllers\ApiController::class,'userData'])->name('userData');
    //文件上传小牛(七牛云)
    Route::post('file',[\App\Http\Controllers\ApiController::class,'upfile'])->name('upfile');
    //用户个人信息修改
    Route::post('idcardup',[\App\Http\Controllers\ApiController::class,'idcardup'])->name('idcardup');
    //用户身份证上传
    Route::post('cardimg',[\App\Http\Controllers\ApiController::class,'cardimg'])->name('cardimg');
    //用户认证信息添加
    Route::post('idcard',[\App\Http\Controllers\ApiController::class,'idcard'])->name('idcard');
    //看房通知接口
    Route::post('notices',[\App\Http\Controllers\ApiController::class,'notices'])->name('notices');


});

10.如果登录报错 提醒你 不支持 post 或者get 路由的时候就是 token传递有问题 好好看看自己的单词是否正确

小程序 路由传递方式?

//wx.request里 头部

header:{Authorization:'Bearer?'+token},

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:03:36  更:2022-03-16 22:04:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 22:05:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码