Laravel 5 기본 사항(12개) - 인증

WBOY
풀어 주다: 2016-08-08 09:26:36
원래의
850명이 탐색했습니다.

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 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿