이제 라라벨 로그인 기능입니다.
로그인 기능이 제대로 안만들어져서 엄청 힘들었습니다..
이유는 아래에서 따로 서술하겠습니다.
먼저 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">  로 그 인</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 |
댓글