Laravel에는 이미 사용자 인증 시스템이 제공됩니다. routes.php
을 살펴보겠습니다. 삭제된 경우 다음을 추가하세요.
<code>Route::controllers([ 'auth' => 'Auth\AuthController', 'password' => 'Auth\PasswordController' ]);</code>
php artisan route:list
를 통해 확인하실 수 있습니다. 브라우저에서 /auth/login
을 방문하면 로그인 인터페이스가 표시됩니다. 시스템 기본값 app.blade.php
에서 Google에 대한 내용을 주석 처리하는 것이 가장 좋습니다. 그렇지 않으면 미쳐버릴 것입니다.
등록, 로그인을 사용하거나 비밀번호를 잊어버릴 수도 있습니다.
제출 후 실제 사용자 등록에 실패했지만, larave가 자동으로 /home
으로 점프했습니다. tinker
을 사용하여 사용자가 생성되었는지 확인할 수 있습니다.
는 실제로 AuthAuthController
안에 trait
을 사용하는데, 삼중주란 무엇인가요? PHP는 단일 상속만 지원하며 특성은 PHP5.4에 추가되었습니다. 특성은 실제로 일련의 메서드를 캡슐화한 것이며 다른 클래스에 포함할 수 있습니다. 추상 클래스와 마찬가지로 직접 인스턴스화할 수 없습니다.
AuthAuthController
에 특성에 대한 언급이 있습니다.
<code>use AuthenticatesAndRegistersUsers;</code>
그를 찾아서 등록 후 어떻게 점프하는지 살펴보겠습니다. vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesAndregistersUsers.php
에 꽤 깊숙이 숨겨놨는데, 와.
<code> public function redirectPath() { if (property_exists($this, 'redirectPath')) { return $this->redirectPath; } //如果用户设置了 redirectTo 属性,则跳转到用户设置的属性,否则到home return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home'; } </code>
알겠습니다. redirectTo
속성을 설정하여 등록 후 점프를 맞춤 설정하세요. AuthAuthContotroller
에서 수정했습니다:
<code> protected $redirectTo = 'articles';</code>
먼저 /auth/logout
를 사용하여 종료했는지 확인하고 문제가 발생하더라도 두려워하지 마세요. 기본 홈페이지가 없으므로 다시 방문하세요. auth/register
새 사용자를 생성하세요. 이번에는 괜찮을 것입니다. .
다시 로그아웃한 후 로그인을 사용하여 로그인하세요.
이제 form_partial
에서 임시로 설정된 숨겨진 필드를 삭제하고 컨트롤러를 수정할 수 있습니다.
<code> public function store(Requests\ArticleRequest $request) { //你可以这样 //$request = $request->all(); //$request['user_id'] = Auth::id(); //更简单的方法 $article = Article::create($request->all()); //laravel 自动完成外键关联 Auth::user()->articles()->save($article); return redirect('articles'); }</code>
기사를 추가하고 tinker
을 이용해 확인해 보세요.
미들웨어
물론 우리는 최소한 로그인을 통해서만 누군가가 기사를 게시할 수 있는 것을 원하지 않습니다. 컨트롤러에 보호 기능을 추가합니다:
<code> public function create() { if (Auth::guest()) { return redirect('articles'); } return view('articles.create'); }</code>
위 코드는 작동하지만 문제가 있습니다. 보호해야 하는 모든 메서드에서 위 처리를 수행해야 합니다. 다행히도 미들웨어가 있습니다.
미들웨어는 파이프라인의 특정 순간에 처리되는 미들웨어로 이해될 수 있습니다. 이 순간은 요청 또는 응답일 수 있습니다. 미들웨어의 처리 규칙에 따라 요청이 리디렉션되거나 전달될 수 있습니다.
에는 app/http/middleware
에 세 가지 미들웨어가 포함되어 있습니다. 이름을 보면 Closure $next
가 다음 미들웨어를 나타냅니다.
app/http/kernel.php
에 미들웨어를 등록합니다. $middleware
섹션에서는 모든 http를 처리하는 미들웨어, $routeMiddleware
은 라우팅만 처리하는 미들웨어를 선언하며, 이러한 미들웨어 중 하나 이상을 사용하려면 명시적으로 선언해야 합니다.
ArticlesController
전체를 보호하고 싶다면 생성자에 미들웨어를 직접 추가합니다.
<code> public function __construct() { $this->middleware('auth'); }</code>
이제 모든 방법이 보호됩니다.
하지만 전체 컨트롤러가 보호되는 것을 원하지 않을 수도 있습니다. 컨트롤러의 메서드 중 한두 개만 보호된다면 어떨까요? 다음과 같이 처리할 수 있습니다.
<code> public function __construct() { $this->middleware('auth', ['only' => 'create']); //当然可以反过来 //$this->middleware('auth', ['except' => 'index']); }</code>
컨트롤러 생성자에 미들웨어를 도입할 필요가 없으며 경로에서 직접 선언할 수 있습니다.
<code>Route::get('about', ['middleware' => 'auth', 'uses' => 'PagesController@about']);</code>
kernel.php
과 같이 'IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode'
에서 제공하는 시스템 미들웨어를 사용하면 유지 관리 모드로 들어갈 수 있습니다. 예를 들어 시스템이 온라인 상태이지만 처리를 위해 일정 기간 동안 일시적으로 종료해야 합니다. 명령줄에서 처리할 수 있습니다. 이 미들웨어의 작동 모습을 살펴보세요.
<code>php artisan down</code>
웹사이트를 방문하면 모든 URL 요청이 즉시 반환되는 것을 확인할 수 있습니다. 온라인 웹사이트:
<code>php artisan up</code>
나만의 미들웨어를 만들어 봅시다:
<code> php artisan make:middleware Demo</code>
그런 다음 코드를 추가하세요:
<code> public function handle($request, Closure $next) { //如果请求中含有 foo,我们就回到控制器首页 if ($request->has('foo')) { return redirect('articles'); } return $next($request); }</code>
모든 요청에 미들웨어를 사용하려면 kernel.php
의 $middleware
에 등록해야 합니다.
<code> protected $middleware = [ ... 'App\Http\Middleware\Demo', ];</code>
이제 이를 테스트할 수 있습니다. /articles/create?foo=bar
을 방문하면 홈 페이지로 리디렉션된다고 가정해 보겠습니다.
이러한 디스플레이 미들웨어를 없애고 실제로 유용한 미들웨어를 만들어 보겠습니다. 페이지를 보호하려고 한다고 가정해 보겠습니다. 이 페이지는 관리자가 액세스할 수 있어야 합니다.
<code>php artisan make:middleware RedirectIfNotAManager</code>
처리 코드를 추가해 보겠습니다.
<code> public function handle($request, Closure $next) { if (!$request->user() || !$request->user()->isATeamManager()) { return redirect('articles'); } return $next($request); }</code>
모델을 수정해 보겠습니다.
<code> public function isATeamManager() { return false; }</code>
단순화를 위해 false를 직접 반환합니다. 이번에는 kernel.php
내부 $routeMiddleware
내부에 미들웨어를 배치합니다.
<code> protected $routeMiddleware = [ ... 'manager' => 'App\Http\Middleware\RedirectIfNotAManager', ];</code>
테스트 경로를 만들어 보겠습니다.
<code>Route::get('foo', ['middleware' => 'manager', function() { return 'This page may only be viewed by manager'; }]);</code>
Guest ID 접속 또는 로그인 ID 접속은 홈페이지로 돌아가는데, isATeamManager()
을 수정하여 true
을 반환하면 로그인 ID 접속은 반환된 정보를 볼 수 있습니다.
이상에서는 Laravel 5(Twelve) - 인증의 기본 사항을 소개했으며 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.