박주니 개발 정리

라라벨 회원 인증 기본편 본문

라라벨

라라벨 회원 인증 기본편

박주니 2022. 3. 17. 14:14
728x90
반응형

laravel 새로운 프로젝트를 만든다면 회원가입이나 로그인 controller 및 해당 DB가 셋팅되어있는 것을 볼 수 있습니다. 

라라벨에서 제공해주는 것이기 때문에 새로 만드는 것보다 그것을 활용하는 것에 초점을 두었습니다. 

 

1. web.php에서 Auth.routes()가 있는 지 확인하시고 없다면 추가해주시길 바랍니다.

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('./dashboard/homepage');
});
Route::get('/users', [App\Http\Controllers\UserController::class, 'index']);
Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
  • Auth.routes()을 하게 되면 vendor\laravel\framework\src\illuminate\Auth 을 route와 연결해서 사용할 수 있는 것으로 이해했습니다. 이부분에 정확한 개념은 추후에 확인할 예정입니다. 

2. 적용하고자하는 Controller에 가서 __construct() middeware 연결되어 있는 지 확인하고 없다면 추가해주시길 바랍니다.

    public function __construct()
    {
        $this->middleware('auth');
    }

 

이해 참고

  1. 먼저 다시 한번 어디 controller로 이동해야하는 지 모르겠다면 현재 저는 /home에 들어갔을 때 그 페이지에 회원인증을 거칠려고 하기 때문에 web.php를 보면 위치가 HomeController이 되어있는 것을 확인할 수 있을 것입니다. 그래서 그 위치로 이동을 했습니다. 
  2. Route::get을 보면 index class를 진행할려고하는데 __construct 클래스 부터 실행된 것은 Auth::routes()을 연결할 때부터 먼저 __contruct() 클래스부터 실행하겠다는 의미입니다. 
  3. __construct 클래스가 다 실행되면 route::get에서 요청한 클래스로 이동해서 진행을 합니다.

3. 클래스에 지정한 view로 이동합니다. 저는 기본으로 만들었던 home.blade.php로 이동했습니다.

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Dashboard</div>
                
                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif

                    You are logged in!
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

이해 참고

  • 현재 제가 보여주는 페이지는 처음에 라라벨 프로젝트를 만들면 기본적으로 제공해주는 페이지입니다. html을 새로 만드는 것보다 현재 @extends 와 @section 활용 이해하시는 게 좋기 때문에 만약 없으시다면 이 페이지를 복붙해서 경로를 맞춰주시면 되겠습니다. 아니면 extends에 있는 html을 한페이지에다가 복붙하시면 될 것입니다. 

4. extends에 지정된 layouts.app으로 이동하십시오. 위치는 resources\views\layouts 폴더안에 있습니다.

이해 참고

  • 이 위치로 이동한 이유는 login 여부에 따라 페이지 이동 제한이 layouts.app에 있습니다. 

5. @guest가 있는 지 확인하고 안에 직접 기본 라라벨 프로젝트를 열어서 확인해보시면 이해하시는데 도움이 될 것입니다. 

                        @guest
                            @if (Route::has('login'))
                                <li class="nav-item">
                                    <a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
                                </li>
                            @endif

                            @if (Route::has('register'))
                                <li class="nav-item">
                                    <a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
                                </li>
                            @endif
                        @else
                            <li class="nav-item dropdown">
                                <a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
                                    {{ Auth::user()->name }}
                                </a>

                                <div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
                                    <a class="dropdown-item" href="{{ route('logout') }}"
                                       onclick="event.preventDefault();
                                                     document.getElementById('logout-form').submit();">
                                        {{ __('Logout') }}
                                    </a>

                                    <form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
                                        @csrf
                                    </form>
                                </div>
                            </li>
                        @endguest

이해 참고

  • @guest~@else~@endguest로 되어있는 것을 볼 수 있는데 @guest~@else는 login이 안되었을 때 header에 login register 버튼이 생성이 돼고 @else~@endquest는 login 되었을 때 보이는 logout할 수 있는 버튼이 생성됩니다. 추가적으로 login을 하지 않고 해당 url로 바로 접속할려고 할 때 login page로 이동하게 됩니다. 

포인트

  • 회원인증을 이용하고자할 때 기존에 새로운 라라벨 프로젝트를 만들었다면 app.blade.php를 extend해서 form을 만드시고 controller에다가 2번 설명에 내용을 추가하면 회원인증 기본은 될 것입니다. 응용하고자 한다면 마찬가지로 controller와 app.blade.php에서 수정하시면 될 것입니다. 저도 좀 더 응용 및 이해가 된 부분이 있으면 추가 설명을 업데이트할 예정입니다. 
728x90
반응형
Comments