라라벨의 인증 / 인가

인증

로그인/사용자정보 관리

Auth::user();승인된 유저

Auth::id();승인된유저아이디

Auth::check(); 사용자가 인증되어있는지 확인

Auth::logout();로그아웃

Auth::user();와 Auth()->user();는 같다 auth()를 사용가능

$request->user() 승인된 유저가있으면 request로부터 유저정보 취득가능

라우트 미들웨어를 사용해서 인증된 사용자 관리

app/Http/Kernel.php파일안에 auth의 미들웨어가 등록되어있고 구현 클래스는 Authenticate.php이다

Route::get('/flights', function () {...})->middleware('auth');

Authenticate.php에서 인증되지않은 유저인 경우 리다이렉팅 처리를 할수있다

수동으로 로그인 구현가능

컨트롤러등에 아래 처럼 구현하면 데이터베이스에서 자동으로 찾아서 인증처리를 해준다

Auth::attempt(['email' => $email, 'password' => $password],<로그인기억여부>)

인스턴스로 인증 (모델에서 Authenticatable구현필요)

Auth::login($user);

사용자정의 guard추가법

Auth::guard('custom')->attemptCustomMethod(...) 이와 같은 사용자 정의 함수를 가진 guard를 추가할수있다

즉 Auth::를 좀 더 내 입맛대로 사용가능하게 만들수있다는것


인가

권한

bootstrap시 실행되는 프로바이더 AuthServiceProvider.php의 boot메서드 안에 Gate퍼사드를 이용해서 구현함

// 관리자 권한 확인
Gate::define('is-admin', function (User $user) {
    return $user->email === config('app.admin_mail');
});

// 사용시
Gate::allows('is-admin') allow말고 다른 함수도 많다

// 권한 확인후 false일경우 403에러를 반환하는 함수
Gate::authorize('is-admin');

현재는 User모델에 관리자권한 칼럼을 추가한 후 아래와 같이 처리

// 관리자 권한 확인
Gate::define('is-admin', function (User $user) {
   return $user->is_admin;
});

참조

https://laravel.kr/docs/9.x/authentication#retrieving-the-authenticated-user

Jul 6, 2023 Views 141