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知识库 -> laravel passport认证 轻松实现移动端与后端分离 -> 正文阅读

[PHP知识库]laravel passport认证 轻松实现移动端与后端分离

基于laravel8创建passport 移动端认证

第一步:安装passport

composer require laravel/passport

第二步:迁移数据库 passport会自动创建多张表
包括一张users表 具体会不会覆盖原来的users同名表不太清楚 建议先把同名表改成别的名字

php artisan migrate

第三步:创建生成安全访问令牌(token)所需的加密键,此外,该命令还会创建“personal access”和“password grant”客户端用于生成访问令牌

php artisan passport:install

以上是基础操作
接下来才是我需要的步骤 因为我主要用passport验证移动端 后端系统管理还是用的session

  • 将passport创建的users表改名为members 之前修改的同名表再改回去

第一步 移动端是面向用户的 创建用户模型

php artisan make:model Models/Member 

第二步 member 模型内容
添加 Laravel\Passport\HasApiTokens trait 到 member模型
该 trait 将会为模型类提供一些辅助函数用于检查认证用户的 token 和 scope

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Sanctum\HasApiTokens;
class Member extends Authenticatable
{
    use HasApiTokens, HasFactory;
    protected $table = 'members'; //指定表名members
    public function findForPassport($username){
    //设置验证的账号键
        return $this->where('username',$username)->first();
    }
}

第三步 在app/providers/AuthServiceProviderboot方法中调用Passport::routes方法,该方法将会为颁发访问令牌、撤销访问令牌、客户端以及私人访问令牌注册必要的路由

 public function boot()
    {
        $this->registerPolicies();

        Passport::routes();
    }

第四步 在配置文件 config/auth.php 中,需要设置 api 认证 guard 的 driver 选项为 passport。这将告知应用在认证输入的 API 请求时使用 Passport 的 TokenGuard

provider 加上member

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'api' => [
            'driver' => 'passport',
            'provider' => 'members',
        ],
    ],
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],
        'members' => [
            'driver' => 'eloquent',
            'model' => App\Models\Member::class,
        ]
        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

第五步 注册移动端应用

php artisan passport:client --password
PS E:\phpstudy_pro\WWW\wechat> php artisan passport:client --password

 What should we name the password grant client? [Laravel Password Grant Client]:
 > members

 Which user provider should this client use to retrieve users? [users]:
  [0] users
  [1] members
 > 1

Password grant client created successfully.
Client ID: 3
Client secret: VFHqu0yB9xdiaO8T146855fFAzdynQO6Xp8ypyUQ

第六步 将获取到的clientid 与secret 保存到env文件中

CLIENT_ID=3
CLIENT_SECRET=VFHqu0yB9xdiaO8T146855fFAzdynQO6Xp8ypyUQ

第七步 在config/services.php中新增配置项

'members' => [
    'appid' => env('CLIENT_ID'),
    'secret' => env('CLIENT_SECRET'),
]

第八步 创建登录路由 api.php

Route::get('/auth/password', function (Request $request){
    $http = new \GuzzleHttp\Client();
    try {
        $response = $http->post($request->root().'/oauth/token',[
            'form_params' => [
                'grant_type' => 'password',
                'client_id' => config('services.members.client_id'),
                'client_secret' => config('services.members.client_secret'),
                'username' => 'member123',
                'password' => '123456',
                'scope' => '*',
            ],
        ]);
    } catch (RequestException $requestExcepion) {
        return json_encode(['code'=>401,'msg'=>'账号登陆失败,请重试!']);
    }
    if($response->getStatusCode() == 401){
        return json_encode(['code'=>401,'msg'=>'账号登陆失败,请重试!']);
    }
    return json_encode(['code'=>200,'data'=>json_decode((string)$response)]);
});

简化测试了 实际 username和password需要在request中获取用户传过来的

开始测试 访问路由
在这里插入图片描述
成功获取到数据

  • 返回结果中包含四个字段,access_token 是授权令牌,token_type 表示认证类型是 Bearer,我们可以将这个 access_token 值设置到 Bearer Authentication 请求头去请求需要认证的后端 API 接口。refresh_token 在令牌过期后刷新令牌时使用,最后 expires_in 表示令牌有效期(单位是秒,即有效期一年)

至于如何携带token访问与如何获取访问用户的数据

在请求头中添加Authorization 内容为

Bearer +你的token  注意Bearer后面有一个空格
Route::namespace('Member')->middleware('auth:api')->group(function(){
    Route::get('user',function(){
        $res = \Auth::user();//是的直接用Auth就能获取到!~!
        var_dump($res);
        return '成功';
    });
});

在这里插入图片描述
总结
不要把passport想象的太神秘了 laravelyyds

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

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 -2025/2/27 14:08:41-

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