Laravel 8 다중 역할 기반 인증
이전 기사에 이어 라이브러리를 사용하지 않고 사용자 역할이 여러 개인 경우에도 사용자 역할 기반 인증을 표시하는 처리 방법multiple role-based authentications in Laravel에 대해 썼습니다.
이 글에서는 현재 버전의 라라벨에서 다중 역할 기반 인증을 적절하게 처리하는 방법과 이를 효율적으로 처리하는 방법에 대해 설명하겠습니다.
이 문서의 시나리오를 사용하여 로그인 성공 시 리디렉션할 다른 역할과 다른 대시보드를 가진 3명의 사용자가 있습니다.
사용자는 다음과 같습니다.
좋습니다. 시나리오가 충분히 명확하고 원하는 내용이라면 자습서를 자세히 살펴보겠습니다.
자세히 살펴보기 전에 귀하가 백엔드 개발자이거나 이 경력 경로를 탐구하려는 경우 다른 개발자와 함께 생산성을 높일 수 있는 백엔드 개발에 대한 일일 기사를 받아보십시오.
시작하기
Laravel 프로젝트를 설정하고 Laravel 역할 기반 인증을 처리하는 데 필요한 필수 라이브러리를 설치하는 것으로 시작하겠습니다.
시연을 위해 새로운 Laravel 프로젝트를 설치하는 것으로 시작하지만 이미 프로젝트가 있는 경우 이 프로세스를 건너뛸 수 있습니다.
다음 명령을 사용하여 새로운 Laravel 프로젝트를 설치하거나 여기에서 문서를 확인할 수 있습니다.
composer create-project --prefer-dist laravel/laravel MultiAuth
데이터베이스 설정
다음으로 데이터베이스를 설정하고 데이터베이스에 올바르게 연결하도록 .env 파일을 구성하겠습니다.
선택한 데이터베이스 클라이언트로 데이터베이스를 생성하고click here 데이터베이스를 올바르게 구성하는 방법을 확인할 수 있습니다.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=DB NAME HERE
DB_USERNAME=DB USERNAME HERE
DB_PASSWORD=DB PASSWORD HERE
이제 Eloquent database 스키마를 설정하겠습니다.
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('role');
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
모든 것을 설정하고 위와 같이 스키마를 생성한 후.
다음 명령을 실행합니다.
php artisan migrate
인증 설정
Laravel 인증을 설정하기 위해 더 나아가서 새 프로젝트에 대한 완전한 사용자 등록 및 로그인 시스템을 만들 것입니다.
먼저 Auth 패키지를 설치하여 Auth 시스템을 스캐폴드합니다.
composer require laravel/ui
UI를 생성하려면 다음 명령을 실행합니다.
php artisan ui bootstrap --auth
npm run install
npm run dev
미들웨어 생성
다음으로 다양한 사용자를 위한 다양한 미들웨어를 생성하고 이를 kernel.php 파일에 등록합니다.
php artisan make:middleware Admin
php artisan make:middleware Player
// Repeat for all users
미들웨어 설정
이제 각 미들웨어에 다음 코드를 추가하고 미들웨어와 동일한 역할에서만 다음 메서드를 허용합니다.
<?php
namespace App\Http\Middleware;
use Auth;
use Closure;
class Player
{
/**
* Handle an incoming request.
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!Auth::check()) {
return redirect()->route('login');
}
if (Auth::user()->role == 'scout') {
return redirect()->route('scout');
}
if (Auth::user()->role == 'player') {
return $next($request);
}
if (Auth::user()->role == 'admin') {
return redirect()->route('admin');
}
}
}
위의 Player 미들웨어에서 역할이 플레이어와 같을 때 우리는 $next 메서드를 반환하고 그렇지 않으면 다른 경로로 리디렉션합니다.
이제 위에서 생성한 다른 미들웨어를 등록해 봅시다.
/**
* The application's route middleware.
* These middleware may be assigned to groups or used individually.
* @var array
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
// .............
'player' => \App\Http\Middleware\Player::class,
'admin' => \App\Http\Middleware\Admin::class,
'scout' => \App\Http\Middleware\Scout::class
];
경로 만들기:
경로를 등록한 후 web.php로 이동하여 다음 코드를 추가하여 해당 미들웨어에 경로를 매핑합니다.
/*
|----------------------------------------------------------
| Web Routes
|----------------------------------------------------------
*/
Route::get('/', function () {
return view('welcome');
});
Auth::routes();
Route::get('/player', 'PlayerController@index')->name('player')->middleware('player');
Route::get('/admin', 'AdminController@index')->name('admin')->middleware('admin');
Route::get('/scout', 'ScoutController@index')->name('scout')->middleware('scout');
// ...........
로그인 컨트롤러 업데이트
다음으로 로그인 컨트롤러를 업데이트하고 다음 코드 줄을 추가하여 사용자가 성공적으로 로그인했을 때 적절한 경로로 리디렉션합니다.
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Auth;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected $redirectTo;
public function redirectTo()
{
switch (Auth::user()->role) {
case 'admin':
$this->redirectTo = '/admin';
return $this->redirectTo;
break;
case 'player':
$this->redirectTo = '/player';
return $this->redirectTo;
break;
case 'scout':
$this->redirectTo = '/scout';
return $this->redirectTo;
break;
default:
$this->redirectTo = '/login';
return $this->redirectTo;
}
// return $next($request);
}
}
보기 설정
마지막으로 각 대시보드에 서로 다른 랜딩 페이지를 설정하여 서로 다른 사용자를 표시해 보겠습니다.
@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 in ADMIN Dashboard!
</div>
</div>
</div>
</div>
</div>
@endsection
위의 코드는 Admin 대시보드의 데모만 보여줍니다. 가능한 한 많은 대시보드를 생성하고 web.php 파일에 적절한 미들웨어가 생성된 경로를 추가할 수 있습니다.
결론
쥐를 죽이는 방법에는 여러 가지가 있다는 것을 알고 있습니다. 동일한 문제를 해결하는 방법에 대한 귀하의 생각과 모범 사례를 듣고 싶습니다. 이전에 이 문제를 접한 적이 있다면 어떻게 해결했습니까? 아래 댓글 섹션에서 들어보겠습니다. 그에 따라 이 게시물을 업데이트할 것입니다.
당신은 전체를 얻을 수 있습니다 source code here
제 글을 읽어주셔서 감사합니다.
여기 내 blog 또는 medium에서 백엔드 개발, 디지털 마케팅 및 콘텐츠 관리 시스템에 대해 정기적으로 글을 씁니다.
2020년 12월 8일 https://masteringbackend.com에서 원래 게시되었습니다.
Reference
이 문제에 관하여(Laravel 8 다중 역할 기반 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kaperskyguru/laravel-8-multiple-role-based-authentications-533p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)