본문 바로가기
IT/PHP

Laravel - 로그인

by Sungjun_ 2020. 12. 10.

이제 라라벨 로그인 기능입니다.

 

로그인 기능이 제대로 안만들어져서 엄청 힘들었습니다..

이유는 아래에서 따로 서술하겠습니다.

 

먼저 resources --> views 경로에 auth 폴더를 만들고 login.blade.php를 만들어줍시다.

 

@extends('layouts.main')

@section('title', '로그인')

@section('content')
    <div class="mx-auto pt-4 pb-4 max-w-2xl h-auto bg-white shadow-lg">
        <form class="p-4 w-full" action="/auth/login" method="post">
            @csrf
            <p class="border-b border-gray-400 text-2xl text-left mb-8 pb-1">&nbsp 로 그 인</p>
            <p class="mt-4">
                <label for="userId" class="inline-block w-1/3 text-lg text-right mr-4">아이디</label>
                <input type="text" name="userId" id="userId" class="border-2 border-blue-400 rounded-lg pl-2 outline-none" size="30">
            </p>
            <p class="mt-6">
                <label for="password" class="inline-block w-1/3 text-lg text-right mr-4">비밀번호</label>
                <input type="password" name="password" id="password" class="border-2 border-blue-400 rounded-lg pl-2 outline-none" size="30">
            </p>
            <p class="mt-6 w-3/5 mx-auto text-right">
                <label for="remember_me" class="inline-block"></label>
                <input type="checkbox" id="remember_me" name="remember" class="w-4 h-4">
                <span class="text-xl text-gray-400">로그인 유지</span>
            </p>

            <p class="mt-8 text-center">
                <input class="bg-blue-600 rounded-xl hover:bg-blue-800 text-white px-6 py-2 mr-6" type="submit" value="로그인">
                <input class="bg-red-600 rounded-xl hover:bg-red-800 text-white px-6 py-2" id="backMain" type="button"
                       value="취소" onclick="location.href = '{{route('main')}}'">
            </p>
        </form>
    </div>
@endsection

 

로그인

라우트까지 설정하면 위와 같이 나올겁니다.

 


다음으로 컨트롤러입니다.

 

app --> Http --> Controllers --> LoginController.php를 만들어줍시다.

 

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;


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

    public function login(Request $request){
        $validation = $request -> validate([
            'userId' => 'required',
            'password' => 'required',
        ]);

        $remember = $request -> input('remember');

        if(Auth::attempt($validation, $remember)){
            return redirect()->route('main');

        } else{
            return redirect()->back();
        }
    }

    public function logout(){
        Auth::logout();

        return redirect()->route('main');
    }
}

 

로그인 창에서 로그인 유지에 체크하시면

$remember에 rember_token이 저장되고 users 테이블에 remember_token이 저장됩니다.

 

if문이 로그인 시도를 하는 곳입니다.


라우트입니다.

 

routes --> web.php

<?php

use App\Http\Controllers\LoginController;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\RegisterController;


/*
|--------------------------------------------------------------------------
| 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('index');
}) -> name('main');

Route::get('auth/login', [LoginController::class, 'index']) -> name('login');
Route::post('auth/login', [LoginController::class, 'login']);
Route::post('auth/logout', [LoginController::class, 'logout']) -> name('logout');

Route::get('register', [RegisterController::class, 'index']) -> name('register');
Route::POST('register', [RegisterController::class, 'store']);

 


로그인을 하겠습니다.

 

저렇게 로그인 유지에 체크를하면 쿠기에 token이 생깁니다.

 

토큰 생성

remember token이 생긴걸 확인할 수있습니다.

 

로그인을 하고 메인화면으로 가게했는데

안되시는 분들은 views 폴더 안에 index.blade.php를 만들어주세요!

 


로그인 기능을 만들 때 힘들었던게 

LoginController에 보시면 (Auth::attempt($validation, $remember)가 있습니다.

 

분명 $validation안에 userId와 password가 들어있는데, 계속 로그인 실패를 했는데 알고보니

문제는 비밀번호 input name이었습니다.

 

처음에 회원가입, 로그인 blade.php에서 비밀번호의 input name을 pw로 했는데 

laravel --> framework --> illuminate --> Auth --> Passwords --> Authenticatable.php를 열어보시면

 

public function getAuthPassword()
    {
        return $this->password;
    }

 

이런 부분이 있는데 $this->password로 돼있어서 로그인이 계속 실패한겁니다.

그래서 password를 pw로 바꾸고 해보니 정상적으로 로그인이 됐습니다...

 

https://jetstream.laravel.com/1.x/introduction.html

 

Introduction | Laravel Jetstream

Introduction Laravel Jetstream Laravel Jetstream is a beautifully designed application scaffolding for Laravel. Jetstream provides the perfect starting point for your next Laravel application and includes login, registration, email verification, two-factor

jetstream.laravel.com

위 링크에 있는 기능을 사용하면 자동으로 로그인, 회원가입이 만들어집니다..

따로 만드시기 싫은 분들은 위 기능을 사용해주세요.

'IT > PHP' 카테고리의 다른 글

Laravel - 구글 소셜 로그인(2)  (0) 2020.12.13
Laravel - 구글 소셜 로그인(1)  (0) 2020.12.13
Laravel - 회원가입  (0) 2020.12.10
Laravel - 댓글 작성하기  (0) 2020.07.26
PHP/Laravel(11) CRUD#4  (0) 2020.02.23

댓글