Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài viết bạn đang xem là tài liệu của Laravel 5x (Giờ đã ngừng support). Bạn có thể xem tài liệu của Laravel mới nhất và đầy đủ tại đây.

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 đổ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','TestController@check');

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

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

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 Illuminate\Support\Facades\Auth;
  • 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é). 

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

12 Comments

Cám ơn tác giả 
Tutorial của a cũng là Document đặc lực cho em

Trung Thịnh

7 năm trước

chỉnh sơ form đăng nhập rồi vào Illuminate\Foundation\Auth\AuthenticatesUsers tìm đến dòng 

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

chỉnh lại là

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

là được

Nguyễn Hoài Ân

6 năm trước

Không nên sửa core nhé bạn, có customize lại thì hãy để ở ngoài!

Vũ Thanh Tài

6 năm trước

Nếu laravel mặc định là xác thực tài khoản users thì tài khoản customer xách thực sao ạ. Auth::attempt($data) luôn xác thực ở vảng users chứ không phải bảng customer

Phan Xuân Hiếu

6 năm trước

Bạn có thể đọc lại bài này nhé!
https://toidicode.com/authentication-trong-laravel-47.html

Vũ Thanh Tài

6 năm trước

Cảm ơn bạn, bài viết khá chi tiết và dễ hiểu.

Mình có thắc mắc là bây giờ khi vào trang admin để truy cập các trang bên trong như category, listing thì làm cách nào để gán quyền login mới xem được các page đó ạ?

Hoàng Đăng

5 năm trước

Bạn tham khảo bài này nhé: https://toidicode.com/middleware-trong-laravel-51.html

Vũ Thanh Tài

5 năm trước

Cảm ơn. Rất bổ ích ạ!

Chiến

5 năm trước

Sao Auth::check của mình nó không được vậy mọi người?

Nguyễn Minh Anh

5 năm trước

Auth::check() nha

Hảo

3 năm trước

Anh ơi, cho em hỏi là lúc đăng nhập em sử dụng Middleware TestController khi đăng nhập đúng thì không vấn đề gì. Nhưng khi đăng nhập sai thì nó không có hiện thông báo như lúc để form action là login vậy.

Bình

3 năm trước

Anh cho em hỏi chút là nếu e không dùng bảng users để login mà e tạo 1 bảng khác thì chố này viết ở đâu ạ
public function username() {

Khánh

1 năm trước

Bình luận

Captcha