Tạo trang đăng nhập sử dụng laravel

 

Chúng ta bắt tay nào.

Đầu tiên mình cần tạo một project mới tên authentication. Các bạn bật command lên chạy lệnh.

conposer create-project laravel/laravel authentication

Các bạn vào mysql của các bạn tạo một database tên là authentication

Sau khi tạo project xong, các bạn mở project lên, vào file .env cấu hình lại databse như sau. Những thông số này có thể thay đổi tùy thuộc vào máy của bạn.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1 //host cua ban
DB_PORT=3306
DB_DATABASE=authentication
DB_USERNAME=root //username cua ban
DB_PASSWORD=   // mat khau cua ban

Sau đó mình cần chạy lệnh sau để tạo bảng users trong database. 

php artisan migrate

Tiếp theo, mình cần có dữ liệu trong bảng users để kiểm tra đăng nhập. 

Dùng command chạy lệnh

php artisan make:seeder UsersTableSeeder

một file UsersTableSeeder được tạo ra trong database\seeds. Trong database\seeds\UsersTableSeeder.php chỉnh như sau.

<?php

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->truncate();
        App\User::create([
        	'name' => 'Badman',
        	'email' =>'badman@gmail.com',
        	'password' => bcrypt('12345678')
        ]);
    }
}

Tiếp đến là trong database\seeds\DatabaseSeeder.php chỉnh như sau bỏ comment dòng

$this->call(UsersTableSeeder::class);

Công việc cuối cùng của việc thêm dữ liệu vào database chỉ cần gọi câu thần chú sau

php artisan db:seed

Tiếp theo, mình cần tạo một method get vào trang đăng nhập và một method post xử lý đăng nhập. Bạn vào file app\Http\routes.php tạo như sau.

Route::get('login','LoginController@getLogin');
Route::post('login','LoginController@postLogin');

Chúng ta cần tạo thêm một controller tên là LoginController. bạn dùng câu thần chú trong command như sau

php artisan make:controller LoginController

Tiếp theo, bạn vào app\Http\Controllers\LoginController.php, tạo 2 method getLogin và postLogin như sau

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use Validator;
use Auth;
use Illuminate\Support\MessageBag;

class LoginController extends Controller
{
    
    public function getLogin() {
    	return view('login');
    }
    public function postLogin(Request $request) {
    	$rules = [
    		'email' =>'required|email',
    		'password' => 'required|min:8'
    	];
    	$messages = [
    		'email.required' => 'Email là trường bắt buộc',
    		'email.email' => 'Email không đúng định dạng',
    		'password.required' => 'Mật khẩu là trường bắt buộc',
    		'password.min' => 'Mật khẩu phải chứa ít nhất 8 ký tự',
    	];
    	$validator = Validator::make($request->all(), $rules, $messages);

    	if ($validator->fails()) {
    		return redirect()->back()->withErrors($validator)->withInput();
    	} else {
    		$email = $request->input('email');
    		$password = $request->input('password');

    		if( Auth::attempt(['email' => $email, 'password' =>$password])) {
    			return redirect()->intended('/');
    		} else {
    			$errors = new MessageBag(['errorlogin' => 'Email hoặc mật khẩu không đúng']);
    			return redirect()->back()->withInput()->withErrors($errors);
    		}
    	}
    }
}
Trong resources\views mình cần tạo một file tên login.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Login</title>
	<!-- Latest compiled and minified CSS & JS -->
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
	<script src="//code.jquery.com/jquery.js"></script>
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
</head>
<body>
	<div class="container">
		<div class="row">
			<div class="col-md-6 col-md-offset-3">
				<form action="{{url('login')}}" method="POST" role="form">
					<legend>Login</legend>
					@if($errors->has('errorlogin'))
						<div class="alert alert-danger">
							<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
							{{$errors->first('errorlogin')}}
						</div>
					@endif
					<div class="form-group">
						<label for="">Email</label>
						<input type="text" class="form-control" id="email" placeholder="Email" name="email" value="{{old('email')}}">
						@if($errors->has('email'))
							<p style="color:red">{{$errors->first('email')}}</p>
						@endif
					</div>
					<div class="form-group">
						<label for="">Password</label>
						<input type="password" class="form-control" id="password" placeholder="Password" name="password">
						@if($errors->has('password'))
							<p style="color:red">{{$errors->first('password')}}</p>
						@endif
					</div>
				
					
					{!! csrf_field() !!}
					<button type="submit" class="btn btn-primary">Đăng nhập</button>
				</form>
			</div>
		</div>
	</div>
</body>
</html>

Sau khi đăng nhập thành công, mình cần trả về trang home. Mình cần phải tạo 1 route trong app\Http\routes.php như sau

Route::get('','HomeController@getIndex');

Và mình cần tạo một controller tên HomeController nữa, dùng lệnh 

php artisan make:controller HomeController

Và trong app\Http\Controllers\HomeController.php mình cần tạo một method __construct để  kiểm tra khi đăng nhập thành công thì mới được vào, ngược lại thì sẽ trả về trang login và một method getIndex như sau.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

class HomeController extends Controller
{
    
    public function __construct() {
    	$this->middleware('auth');
    }

    public function getIndex() {
    	return 'Đăng nhập thành công!';
    }
}

Done.