Laravel 연구 노트 (30) Laravel 가드 및 사용에 관련된 미들웨어

  1. 무엇 gurads입니다

개인 이해는 어떤 기준에 따라 시스템을 말한다 사용자 인증 구성 파일에 앞서 고려 (데이터베이스? 모델?)의 인증을 받으려면

  1. 매개 변수 설명

설정 / auth.php

<?php

return [
	// 默认系统验证使用的方式
    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

	// 默认配置有web和api,可以根据自己需要使用
    'guards' => [
        'web' => [
            'driver' => 'session', //一般为seesion和token,Oauth 2.0的时候还有passport
            'provider' => 'users',
        ],

        'admin' => [
            'driver' => 'session',	
            'provider' => 'admins',
        ],

        'api' => [
            'driver' => 'token',
//            'driver' => 'passport', 		
            'provider' => 'users',
            'hash' => false,
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',	// 模型
            'model' => App\User::class,
        ],
        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Admin::class,
        ],

        // 'users' => [
        //     'driver' => 'database',	//数据库
        //     'table' => 'users',
        // ],
    ]
];
  1. 가드를 구성한 후,뿐만 아니라 구성, 공장, miguration에 따라 해당 모델을 생성해야
// 这个语句可以一次性生成上述三个文件,并都与admins表关联
artisan make:model -fm Admin
  1. 또한 해당 클래스에 도입 모델하는 검증을 적용하려면
namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class Admin extends Authenticatable
{
    use Notifiable;
}
  1. 또한, 상기 컨트롤러는, 그렇지 않으면, 해당 외관 도입 Auth::사용될 수 없다
use Auth;

Auth::guard()->user(); // 一切没有特别标注,默认为guard配置里default的值
Auth::guard('admin')->user();

auth('admin')->user();
  1. 미들웨어의 사용
// controller
$this->middleware('guest')->except('logout');
$this->middleware('guest:admin')->except('logout');

// route
Route::middleware('web','auth')->prefix('admin')->group(function() {
    Route::name('admin.')->group(function () {
        Auth::routes();
    });
    Route::get('/', 'AdminController@index');
});
  1. 어떻게 수정하는 주소 확인이 점프를 실패

응용 프로그램 / HTTP / Kernel.php

    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    ];

고객 미들웨어

// RedirectIfAuthenticated中进行相应修改即可,其中guard为middleware('guest:admin')传进来的'admin'
   public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect($guard == 'admin' ? '/admin' : '/');
        }

        return $next($request);
    }

관리자 미들웨어

방법

// Authenticate
// vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php
public function handle($request, Closure $next, ...$guards)
protected function authenticate($request, array $guards)
protected function unauthenticated($request, array $guards)
{
    throw new AuthenticationException(
        'Unauthenticated.', $guards, $this->redirectTo($request)
    ); // 此处抛出AuthenticationException异常
}
// 抛出的错误在app/Exceptions/Handler.php中处理
// vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php
public function render($request, Exception $e) {
	...
	// 此处判断是否是AuthenticationException异常,为真,进入unauthenticated方法
    } elseif ($e instanceof AuthenticationException) {
    	return $this->unauthenticated($request, $e);
}

//找到了最终跳转的配置
protected function unauthenticated($request, AuthenticationException $exception)
{
    return $request->expectsJson()
                ? response()->json(['message' => $exception->getMessage()], 401)
                : redirect()->guest($exception->redirectTo() ?? route('login'));
}

응용 프로그램 / 예외 / Handler.php는 예외 클래스 점프 방식 덮어 쓰기

protected function unauthenticated($request, AuthenticationException $exception)
{
	dd(
    return $request->expectsJson()
                ? response()->json(['message' => $exception->getMessage()], 401)
                : redirect()->guest($exception->redirectTo() ?? route('login'));
}
게시 40 개 원래 기사 · 원의 칭찬 0 · 조회수 760

추천

출처blog.csdn.net/qj4865/article/details/104411892