07/09/2018, 17:40

Bài 24: Auththentication trong Laravel (Login, Logout)

Bài trước mình đã hướng dẫn mọi người custom lại auth register của Laravel rồi! Hôm nay mình sẽ hướng dẫn mọi người custom phần đăng nhập. -Lưu ý: Mình vẫn sử dụng database của bài trước nhé! 1, Đăng nhập với Logincontroller của Laravel. -Trong phần này mình sẽ hướng dẫn cụ thể mọi người ...

Bài trước mình đã hướng dẫn mọi người custom lại auth register của Laravel rồi! Hôm nay mình sẽ hướng dẫn mọi người custom phần đăng nhập.

-Lưu ý: Mình vẫn sử dụng database của bài trước nhé!

1, Đăng nhập với Logincontroller của Laravel.

-Trong phần này mình sẽ hướng dẫn cụ thể mọi người đổi email đăng nhập thành username.

-Đầu tiên chúng ta cần chỉnh sửa lại trường đăng nhập trong giao diện login của Laravel (Đường dẫn: resources/views/auth/login.blade.php) như sau:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Login</div>
                <div class="panel-body">
                    <form class="form-horizontal" role="form" method="POST" action="{{ url('/login') }}">
                        {{ csrf_field() }}

                        <div class="form-group{{ $errors->has('username') ? ' has-error' : ' }}">
                            <label for="email" class="col-md-4 control-label">Username</label>

                            <div class="col-md-6">
                                <input id="email" type="text" class="form-control" name="username" value="{{ old('username') }}" required autofocus>

                                @if ($errors->has('username'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('username') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('password') ? ' has-error' : ' }}">
                            <label for="password" class="col-md-4 control-label">Password</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control" name="password" required>

                                @if ($errors->has('password'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('password') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group">
                            <div class="col-md-6 col-md-offset-4">
                                <div class="checkbox">
                                    <label>
                                        <input type="checkbox" name="remember" {{ old('remember') ? 'checked' : '}}> Remember Me
                                    </label>
                                </div>
                            </div>
                        </div>

                        <div class="form-group">
                            <div class="col-md-8 col-md-offset-4">
                                <button type="submit" class="btn btn-primary">
                                    Login
                                </button>

                                <a class="btn btn-link" href="{{ url('/password/reset') }}">
                                    Forgot Your Password?
                                </a>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

-Chú thích: Phần trên mình đã thay đổi trường email mặc định của Laravel thành username.

-Tiếp đó mọi người cần khai báo cho Laravel biết rằng là dữ liệu bạn lấy ra từ trường nào trong bảng và để làm điều đó mọi người cần phải vào LoginController (đường dẫn: app/Http/Controllers/auth/loginController.php) và thêm hàm username vào trong class với cú pháp:

public function username()
    {
        return 'columnName';
    }

-Chú thích columnName: Là tên cột bạn muốn sử dụng để đăng nhập.

VD: Mình để là đăng nhập bằng username thì sẽ như sau:

public function username()
    {
        return 'username';
    }

-Với Phần cấu hình đăng nhập này chỉ như thế là đã thành công rồi.

2, Đăng nhập với attempt().

-Đây là một phần  mở rộng của Laravel giúp chúng ta có thể tạo ra các phiên đăng nhập tùy chỉnh.

-Mình vẫn sử dụng login.blade.php của Laravel nhưng sẽ sửa action của form thành:

 <form class="form-horizontal" role="form" method="POST" action="{{ url('/logintest') }}">

-Tiếp đó các bạn vào Route/web.php thêm một route để điều hướng dữ liệu như sau:

Route::post('logintest','[email protected]');

-Và tạo thêm một TestController để xử lý đăng nhập:

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;

class TestController extends Controller
{
    public function check(Request $request)
    {
    	$data=[
    		'username'=>$request->username,
    		'password'=>$request->password,
    	];
    	if(Auth::attempt($data)){
    		//true
    	}else{
    		//false
    	}
    }
}

-Chú ý:

  • Trong controller nếu muốn sử dụng authentication thì phải khai báo sử dụng namespace của nó: use IlluminateSupportFacadesAuth;
  • Auth::attempt(): Đây là phương thức check input data có hợp lệ không, nếu hợp lệ sẽ trả về true và ngược lại. Hoàn toàn có thể thêm điều kiện VD:
$data=[
    		'username'=>$request->username,
    		'password'=>$request->password,
    		'level'=>1,
    	];

3, Logout Trong Laravel.

-Trong Laravel Để đăng xuất thì khá là đơn giản. Các bạn chỉ cần sử dụng phương thức:

Auth::logout();

4, Kiểm tra đăng nhập với check().

-Để kiểm tra xem user đã đăng nhập hay chưa thì Laravel có hỗ trợ chúng ta phương thức check() với cú pháp:

if (Auth::check()) {
    // Đã đăng nhập.
}
else{
  //chưa đăng nhập.
}

- Phương  thức check() trả về giá trị true nếu đã đăng nhập và ngược lại.

5, Truy vấn thông tin của user đang đăng nhập.

-Để truy vấn các thông tin của người đang đăng nhập thì Laravel có hỗ trợ chúng ta phương thức user(), sử dụng với cú pháp:

$user = Auth::user();

-Phương thức này trả về giá trị là một json, và đương nhiên là các bạn có thể truy vấn vào các phần tử trong json.

VD:

Auth::user()->name;

-Và để lấy id của user đang đăng nhập thì dùng:

Auth::id();

4, Lời kết.

-Bài này mình đã hướng dẫn mọi người custom lại chức năng đăng nhập, truy vấn thông tin và đăng xuất trong authentication rồi. Qua bài này các bạn thấy được sức mạnh của Laravel thế nào rồi chứ? Nhưng chưa dừng ở đó Laravel vẫn còn nhiều cái hay lắm! (xem tiếp ở các phần sau nhé). 

0