[Laravel 5] Mysql 으로 로그인 페이지 만들기

Programming/Laravel 2018. 2. 28. 02:30 Posted by 생각하는로뎅
반응형

1. 참고로 필자는 무료 라라벨 어드민 페이지를 쓰고, php 7 환경이다.

https://startlaravel.com/themes/sb-admin-laravel-5/



2. resource에 view가 쪽에 로그인 페이지를 구성할텐데, 로그인 페이지 소스는 아래와 같다. 빨간색 부분이 핵심이다.


resource / view / login.blade.php


@extends ('layouts.plane')

@section ('body')

<div class="container">

        <div class="row">

            <div class="col-md-4 col-md-offset-4">

            <br /><br /><br />

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

               @section ('login_panel_body')

                        <form role="form" action="{{ url ('loginAdminUser') }}" method="post">

                            <fieldset>

                              <input type="hidden" name="_token" value="{{csrf_token()}}"/>

                                <div class="form-group">

                                    <input class="form-control" placeholder="이메일" name="email" type="email" autofocus>

                                </div>

                                <div class="form-group">

                                    <input class="form-control" placeholder="비밀번호" name="password" type="password" value="">

                                </div>


                                <input type="submit" name="login" value="로그인" class="btn btn-lg btn-success btn-block"/>

                                

                            </fieldset>

                        </form>


                @endsection

                @include('widgets.panel', array('as'=>'login', 'header'=>true))

            </div>

        </div>

    </div>

@stop



3. 이제 로그인 버튼을 누르면, POST 로 날아갈 URL이 위 소스에보면  url ('loginAdminUser') 으로 지정되어 있다.

  그럼 이제 loginAdminUser 이라는 녀석을 인식하도록 할당해줘야한다.

app / Http / routes.php  (laravel v.5.0.16)
routes / web.php  (laravel v.5.5)


Route::post('/loginAdminUser', 'loginController@login');

을 입력해주면, loginAdminUser을 인식해서, loginController에 있는 login 함수로 이동시켜준다.

4. 이제 컨트롤러를 작성할 차례이다. 컨트롤러는
 
app / Http / Controllers /  

loginController.php 파일을 만든다.

그리고 그 안에 아래 소스를 삽입한다.

<?php namespace App\Http\Controllers;

use Illuminate\http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;

class loginController extends Controller {

public function login(Request $req){

$email = $req->input('email');
$pwd = $req->input('password');

echo Hash::make($pwd);

$result = Auth::attempt(['email' => $email, 'password' => $pwd], true);

if ($result) {
return redirect()->intended('/');
} else {
return redirect()->back();
}


}

}


5. 여기서 끝이 아니다. mysql을 사용하는 것이므로, mysql에 접속할 수 있도록 mysql host등 각종 정보를 입력해줘야한다.

config / database.php 에 


'default' => 'mysql',

....

'mysql' => [
'host'      => env('DB_HOST', '데이터베이스 IP ADDRESS'),
'database'  => env('DB_DATABASE', '데이터베이스 이름'),
'username'  => env('DB_USERNAME', '로그인 아이디'),
'password'  => env('DB_PASSWORD', '비밀번호'),



정보를 수정하도록한다.



6.  다음은 인증할 방식을 설정해야한다.


config / auth.php 


아래와 같이 찾아서 바꿔준다.


'driver' => 'database',         // 데이터베이스를 쓴다고 명시한다.

'table' => 'ADMIN_USER',    // 어드민 유저 정보가 담긴 테이블 이름을 넣는다.



7. 이제 위에 table 이름을 ADMIN_USER 을 쓰기로 했다.


테이블 생성 쿼리는 아래와 같다.


-- ADMIN_USER Table Create SQL

CREATE TABLE ADMIN_USER

(

    `id`        INT             NOT NULL    AUTO_INCREMENT COMMENT 'id', 

    `name`      VARCHAR(100)    NOT NULL    COMMENT '이름', 

    `email`     VARCHAR(100)    NOT NULL    COMMENT '이메일', 

    `password`  VARCHAR(60)     NOT NULL    COMMENT '비밀번호', 

    `remember_token`  VARCHAR(100)    NULL        COMMENT '기억하기 토큰',

    PRIMARY KEY (id)

);


ALTER TABLE ADMIN_USER COMMENT '어드민 유저';



위와 같이 테이블을 만들어주는게 좋다.


id, password 필드명이 다르면, 저거 찾을 수 없다고 계속 에러가 난다. 그대로 해주는게 정신 건강에 좋다.



8. 테이블도 만들었고, 설정도 다 끝냈다. 이제 데이터베이스에 아이디, 비밀번호를 저장하고 로그인해본다.  그러면 로그인이 안될것이다.


9. 라라벨은 내부적으로 암호를 보낼때 암호화해서 보낸다고한다. 위 4번을 보면,


echo Hash::make($pwd);


라는 부분이 있다.


그 밑에 코드는 다 날리고, echo Hash::make($pwd); 을 실행하면 

$2y$10$0NoGPfWZHLJsfxWNrly6kuSrLlSkX9VsyX.99AGbAQgM8LRAG072y


이런 긴 데이터가 나오는데,


이것을 데이터베이스 비밀번호에 넣어주도록한다.



10. 다시 소스 원복하고 로그인해보면 아주 잘되는것을 볼 수 있다.



p.s

참고로 데이터베이스에  `password`  VARCHAR(60) 으로되어 있는데, 60자로 설정해놔야한다는 이야기를 얼핏봐서, 그렇게 설정해두었다.

반응형