[Day30]颁发和注销访问token

安装passport套件

  1. 安装套件cmd执行以下
    composer require laravel/passport

  2. config/app.php档案中到providers配置文件数组中注册 Passport 服务

  3. Passport 服务提供者在框架中注册了自己的数据库迁移目录
    所以要进行migrate
    php artisan migrate

  4. create "personal access" and "password grant"
    php artisan passport:install

  5. 加入身份验证防护选项
    config\auth.php

    'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
        'hash' => false,
    ],
    ],
    
  6. 注册颁发访问令牌和撤销访问令牌、客户端和个人访问令牌所需的路由
    app\Providers\AuthServiceProvider.php

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

        Passport::routes(); // 加上
    }
  1. 将辅助方法加入到模型之中
    app\Models\User.php
    引入以下
    use Laravel\Passport\HasApiTokens;
    然後使用
    use HasApiTokens, HasFactory, Notifiable;

创建身分controller

php artisan make:controller AuthController.php

新增登入登出及注册function

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AuthController extends Controller
{
    public function signup(Request $request)
    {
        $validateData = $request->all();
        $user = new User([
            'name' => $validateData['name'],
            'email' => $validateData['email'],
            'password' => bcrypt($validateData['password']),
        ]);
        $user->save();
        return response('success', 201);
    }

    public function login(Request $request)
    {
        $validateData = $request->validate([
            'email' => 'required|string|email',
            'password' => 'required|string'
        ]);
        if (!Auth::attempt($validateData)){
            return response('授权失败', 401);
        }
        $user = $request->user();
        $tokenResult = $user->createToken('Token');
        $tokenResult->token->save();
        return response(['token'=> $tokenResult->accessToken]);
    }

    public function logout(Request $request)
    {
        $request->user()->token()->revoke();
        return response(
            ["message" => "成功登出"]
        );
    }
}

设定路由

web.php设定路由

Route::post('/signup', 'AuthController@signup'); // 注册
Route::post('/login', 'AuthController@login'); // 登入
Route::group(['middleware'=>'auth:api'], function(){
    Route::get('/logout', 'AuthController@logout');
});

测试

首先注册
https://ithelp.ithome.com.tw/upload/images/20210930/20128999evj2PGwdcU.jpg
注册成功後登入取得token
https://ithelp.ithome.com.tw/upload/images/20210930/20128999lcYBvzdSCr.jpg
将token复制到Bearer Token
https://ithelp.ithome.com.tw/upload/images/20210930/20128999yCHQyPLMeC.jpg
复制完成後才能够登出,登出後token就失效罗
https://ithelp.ithome.com.tw/upload/images/20210930/20128999fqGn7qYymv.jpg

可以举一反三,将产品路由放置到auth路由内,这样只有登入的人才可以取得产品资讯


<<:  [Day30]C# 不鸡础观念- Install Tailwind Css with ASP.NET MVC5

>>:  ASP.NET MVC 从入门到放弃(Day26)-PagedList分页套件介绍

Day 16 - 进行影像辨识训练

Day 16 - 进行影像辨识训练 在进行训练的过程中,我们可能因为某些关系而中断训练,可能是网路断...

Unity自主学习(一):认识2D/3D游戏引擎-Unity

动机 决定题目的动机是,从最早开始决定就读资讯相关就想着要在未来踏入电脑游戏产业,而作为许多初学者最...

Day 27: KMS key建立、轮换/ Secrets Manager secret轮换设定

KMS key建立 先决条件 你的帐号必须要有几个IAM的Policy,包含kms:CreateKe...

Day 7 [Python ML] Machine Learning的处理流程

Step 1: 蒐集数据 要先将自己需要的数据下载好,并且确认资料格式而去做不同的处理 Step ...

谈谈service

Service 就像是在Windows 设计程序中的「背景运作」系统服务类型的程序,我们可以设计具有...