카테고리 없음

laravel 라라벨 로그인

백위한 2024. 5. 9. 23:38

라라벨의 핵심 인증 기능은 guards(가드)와 providers(공급자)로 구성되어 있다.

가드: 각 요청에 대해 사용자가 인증되는 방식을 정의

공급자: persistent 스토리지에서 사용자를 검색하는 방법을 정

 

인증이 작동하는 방식

웹 브라우저를 사용할 때 사용자는 로그인 양식을 통해 사용자 이름과 비밀번호를 제공한다.

이러한 자격 증명이 정확하면 애플리케이션은 인증된 사용자에 대한 정보를 사용자 세션에 저장.

브라우저에 발급된 쿠키에는 세션 ID가 포함되어 있으므로 이후 애플리케이션에 대한 요청이 사용자를 올바른 세션과 연결할 수 있음.

세션 쿠키가 수신되면 애플리케이션은 세션 ID를 기반으로 세션 데이터를 검색하고 인증 정보가 세션에 저장된 것을 확인한 후 사용자를 인증된(authenticated) 것으로 간주.

 

 

Auth 파사드 통해 라라벨의 인증 서비스에 액세스할 것이므로 클래스 최상단에 Auth 파사드를 사용하도록 선언한다.

attempt 메서드는 로그인 폼에서 인증 시도를 처리하는데 사용된다.

인증에 성공하면 세션 고정 공격을 방지하기 위해 사용자의 세션을 다시 생성한다.

 

attempt 메서드는 키/값의 쌍으로 이루어진 배열을 첫번째 인자로 전달받는다.

배열의 값은 데이터베이스 테이블에서 사용자를 찾는데 사용된다.

username 칼럼을 통해 사용자를 찾는다.

사용자를 찾으면 해시 처리되어 데이터베이스에 저장된 패스워드와 메서드로 전달받은 배열의 password 값을 비교한다.

두 개의 해시처리된 패스워드가 일치하면 해당 사용자로 인증된 세션을 새로 발급해 준다.

 

라라벨의 인증 서비스는 인증 가드의 공급자 설정에 따라 데이터베이스에서 사용자를 검색한다.

config/auth.php 설정 파일에는 기본적으로 Eloquent 사용자 공급자가 지정되어 있으며, 사용자를 검색할 때 App/Models/User 모델을 사용하도록 설정되어 있다.

설정 파일에서 값을 변경할 수 있다.

 

attempt 메서드는 인증에 성공하면 true를, 실패하면 false를 반환한다.

 

 

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\BoardController;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    public function showLoginForm()
    {
        return view('auth.login');
    }

    public function login(Request $request)
    {
        $credentials = $request->only('username', 'password');

        if (Auth::attempt($credentials)) {
            // 인증 성공 시
            return redirect()->action([BoardController::class, 'index']);
        }

        // 인증 실패 시
        return redirect()->back()->withInput()->withErrors([
            'username' => '아이디 또는 비밀번호가 일치하지 않습니다.',
        ]);
    }
}

 

 

auth 함수는 authenticator 인스턴스를 반환한다.

Auth 파사드 대안으로 사용할 수 있다.

 

$user = auth()->user();

 

필요한 경우 어떤 guard 인스턴스를 사용할지 지정할 수 있다.

 

$user = auth('admin')->user();