개인 이해는 어떤 기준에 따라 시스템을 말한다 사용자 인증 구성 파일에 앞서 고려 (데이터베이스? 모델?)의 인증을 받으려면
- 매개 변수 설명
설정 / 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',
// ],
]
];
- 가드를 구성한 후,뿐만 아니라 구성, 공장, miguration에 따라 해당 모델을 생성해야
// 这个语句可以一次性生成上述三个文件,并都与admins表关联
artisan make:model -fm Admin
- 또한 해당 클래스에 도입 모델하는 검증을 적용하려면
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class Admin extends Authenticatable
{
use Notifiable;
}
- 또한, 상기 컨트롤러는, 그렇지 않으면, 해당 외관 도입
Auth::
사용될 수 없다
use Auth;
Auth::guard()->user(); // 一切没有特别标注,默认为guard配置里default的值
Auth::guard('admin')->user();
auth('admin')->user();
- 미들웨어의 사용
// 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');
});
- 어떻게 수정하는 주소 확인이 점프를 실패
응용 프로그램 / 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'));
}