tritue.edu.vn


Tạo chức năng đăng nhập và đăng kí trong Lavarel

 

Trong quá trình phát triển ứng dụng web với Laravel, một trong những tính năng cơ bản nhất là đăng nhập và đăng ký người dùng. Mặc dù Laravel đã cung cấp sẵn các chức năng này thông qua package Laravel Breeze hoặc Laravel Jetstream, nhưng đôi khi bạn cần tạo một hệ thống đăng nhập và đăng ký tuỳ chỉnh để đáp ứng các yêu cầu cụ thể của ứng dụng.



Tạo dự án mới

Copy
         

composer create-project laravel/laravel laravel-custom-auth


Sau khi tạo dự án xong thì chuyển vào thư mục đó

Copy
         

cd laravel-custom-auth


Tạo CSDL, chạy migrate

Copy
         

- Tạo CSDL xong rồi chỉnh thông tin kết nối trong file .env

    DB_DATABASE=your_database_name

    DB_USERNAME=your_username

    DB_PASSWORD=your_password

- Chạy migrate: 

php artisan migrate


Tạo Routes cho các trang Đăng Nhập và Đăng Ký

Copy
         

Cập nhật routers/web.php

    use App\Http\Controllers\AuthController;

    use Illuminate\Support\Facades\Route;

     

    Route::get('/register', [AuthController::class, 'showRegistrationForm'])->name('register');

    Route::post('/register', [AuthController::class, 'register']);

     

    Route::get('/login', [AuthController::class, 'showLoginForm'])->name('login');

    Route::post('/login', [AuthController::class, 'login']);

     

    Route::post('/logout', [AuthController::class, 'logout'])->name('logout');


Tạo AuthController

Copy
         

php artisan make:controller AuthController


Mở file app/Http/Controllers/AuthController.php và cập nhật như sau:

Copy
         

    namespace App\Http\Controllers;

     

    use App\Models\User;

    use Illuminate\Http\Request;

    use Illuminate\Support\Facades\Auth;

    use Illuminate\Support\Facades\Hash;

    use Illuminate\Validation\ValidationException;

     

    class AuthController extends Controller

    {

        // Hiển thị form đăng ký

        public function showRegistrationForm()

        {

            return view('auth.register');

        }

     

        // Xử lý đăng ký người dùng

        public function register(Request $request)

        {

            $request->validate([

                'name' => 'required|string|max:255',

                'email' => 'required|string|email|max:255|unique:users',

                'password' => 'required|string|min:8|confirmed',

            ]);

     

            User::create([

                'name' => $request->name,

                'email' => $request->email,

                'password' => Hash::make($request->password),

            ]);

     

            return redirect()->route('login')->with('success', 'Đăng ký thành công. Bạn có thể đăng nhập.');

        }

     

        // Hiển thị form đăng nhập

        public function showLoginForm()

        {

            return view('auth.login');

        }

     

        // Xử lý đăng nhập

        public function login(Request $request)

        {

            $request->validate([

                'email' => 'required|string|email',

                'password' => 'required|string',

            ]);

     

            if (Auth::attempt(['email' => $request->email, 'password' => $request->password])) {

                $request->session()->regenerate();

                return redirect()->intended('dashboard')->with('success', 'Đăng nhập thành công.');

            }

     

            throw ValidationException::withMessages([

                'email' => 'Thông tin đăng nhập không chính xác.',

            ]);

        }

     

        // Xử lý đăng xuất

        public function logout(Request $request)

        {

            Auth::logout();

            $request->session()->invalidate();

            $request->session()->regenerateToken();

     

            return redirect('/login')->with('success', 'Bạn đã đăng xuất.');

        }

    }


Tạo các file view cho form đăng nhập và đăng ký. Trong thư mục resources/views, tạo một thư mục con tên là auth. Sau đó, tạo hai file login.blade.php và register.blade.php bên trong thư mục này.

Copy
         

login.blade.php

    <!DOCTYPE html>

    <html>

    <head>

        <title>Đăng Nhập</title>

    </head>

    <body>

        <h2>Đăng Nhập</h2>

     

        @if(session('success'))

            <div>{{ session('success') }}</div>

        @endif

     

        <form method="POST" action="{{ route('login') }}">

            @csrf

            <div>

                <label>Email:</label>

                <input type="email" name="email" value="{{ old('email') }}">

                @error('email')

                    <span>{{ $message }}</span>

                @enderror

            </div>

     

            <div>

                <label>Mật khẩu:</label>

                <input type="password" name="password">

                @error('password')

                    <span>{{ $message }}</span>

                @enderror

            </div>

     

            <button type="submit">Đăng Nhập</button>

        </form>

    </body>

    </html>

 

 

 

register.blade.php

    <!DOCTYPE html>

    <html>

    <head>

        <title>Đăng Ký</title>

    </head>

    <body>

        <h2>Đăng Ký</h2>

     

        @if(session('success'))

            <div>{{ session('success') }}</div>

        @endif

     

        <form method="POST" action="{{ route('register') }}">

            @csrf

            <div>

                <label>Tên:</label>

                <input type="text" name="name" value="{{ old('name') }}">

                @error('name')

                    <span>{{ $message }}</span>

                @enderror

            </div>

     

            <div>

                <label>Email:</label>

                <input type="email" name="email" value="{{ old('email') }}">

                @error('email')

                    <span>{{ $message }}</span>

                @enderror

            </div>

     

            <div>

                <label>Mật khẩu:</label>

                <input type="password" name="password">

                @error('password')

                    <span>{{ $message }}</span>

                @enderror

            </div>

     

            <div>

                <label>Nhập lại mật khẩu:</label>

                <input type="password" name="password_confirmation">

            </div>

     

            <button type="submit">Đăng Ký</button>

        </form>

    </body>

    </html>

 


Trang Dashboard và điều hướng sau khi đăng nhập thành công

Copy
         

Thêm routes:

    Route::get('/dashboard', function () {

        return view('dashboard');

    })->middleware('auth')->name('dashboard');

Tạo file resources/views/dashboard.blade.php:

    <!DOCTYPE html>

    <html>

    <head>

        <title>Dashboard</title>

    </head>

    <body>

        <h2>Chào mừng đến với Dashboard!</h2>

     

        <form method="POST" action="{{ route('logout') }}">

            @csrf

            <button type="submit">Đăng Xuất</button>

        </form>

    </body>

    </html>

 


Khởi động server: php artisan serve

Copy
         

- Khởi động server: php artisan serve

- Truy cập vào http://localhost:8000/register để đăng ký và http://localhost:8000/login để đăng nhập. Sau khi đăng nhập thành công, người dùng sẽ được chuyển hướng đến trang dashboard.




Link chia sẻ bài viết
Copy
            https://tritue.edu.vn/tuecode/tracnghiem30/index.php/baiviet/post/view/id/232?id=232         

Bài viết liên quan