หน้าแรก/บทความ/ทำระบบ Authentication อย่างง่ายด้วย Laravel 5
กลับหน้าบทความ
🔐Laravel

ทำระบบ Authentication อย่างง่ายด้วย Laravel 5

แนะนำวิธีสร้างระบบ Authentication ด้วย Laravel 5 ครอบคลุมการติดตั้ง Register, Login, Logout, Permission และ Forgot Password พร้อมวิธีตรวจสอบสิทธิ์ด้วย Middleware

ศิริชัย ธีรภัทรสกุล (ตั้ม)อ่าน 5 นาที19 มกราคม 2562
#Laravel#Authentication#PHP#Login#Middleware

การทำระบบ Authentication หรือระบบที่ต้อง Login เข้าใช้งาน สำหรับ Laravel นั้นจะมีเครื่องมือที่ช่วยให้เราสร้างระบบ Register, Login, Logout, Permission และ Forgot Password เป็นโครงสร้างอย่างง่ายให้เบื้องต้น ซึ่งขั้นตอนไม่ยุ่งยาก ทั้งยังสะดวกรวดเร็วประหยัดเวลาไปได้มาก

วิธีติดตั้ง

เริ่มต้นให้เราเปิด Terminal เพื่อรันคำสั่ง php artisan ดังนี้ครับ

php artisan make:auth

จากนั้นสร้างฐานข้อมูลให้เสร็จเรียบร้อย เพื่อที่จะรันคำสั่ง database migrations

php artisan migrate

ส่วนใครที่เจอ "ข้อผิดพลาด Specified key was too long" ให้ลบตาราง users, password_resets และลบแถวที่มีคำสั่งสร้างตาราง users และ password_resets ออกไปในตาราง migrations จากนั้นให้แก้ไขตาม บทความนี้ แล้วสั่ง php artisan migrate ตามด้านบนอีกครั้ง

เมื่อเสร็จเรียบร้อยแล้วลองเข้า URL: http://your-app.dev/register จะเจอหน้าลงทะเบียนลองกรอกข้อมูล ถ้า Login เข้าระบบเรียบร้อย ก็เป็นอันใช้งานเบื้องต้นได้ครับ

วิธีใช้งาน

ส่วนตัวผมใช้วิธีเลียนแบบโครงสร้างที่ Laravel มันสร้างให้มาแต่ต้นเลย เอามาเป็นต้นแบบ เมื่อเราเข้าไปดูใน /routes/web.php จะมีการเพิ่ม Code และสร้าง Controller ที่ชื่อ HomeController มาให้เรา

Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');

จากด้านบน จะเป็นหน้าที่เราจะพบหลังจาก Login มาแล้ว /home ซึ่งเราสามารถเปลี่ยน Path หลังจาก Login แล้วได้

เปลี่ยน Path เริ่มต้นหลังจาก Login

ตัวอย่างเช่น จะเปลี่ยนให้เมื่อ Login แล้วไปยัง /auth/dashboard

เข้าไปที่ไฟล์ /app/Http/Controllers/Auth/LoginController.php เปลี่ยนค่าดังนี้

protected $redirectTo = '/auth/dashboard';

เข้าไปที่ไฟล์ /vendor/laravel/framework/src/Illuminate/Foundation/Auth/RedirectsUsers.php เปลี่ยนค่าดังนี้

return property_exists($this, 'redirectTo') ? $this->redirectTo : '/auth/dashboard';

เข้าไปที่ไฟล์ /routes/web.php เพิ่ม Path /auth/dashboard และเรียก Auth\DashboardController@index ดังนี้

Route::get('/auth/dashboard', 'Auth\DashboardController@index');

วิธีตรวจสอบสิทธิ์การเข้าสู่ระบบใน Controller

ให้สร้าง Controller DashboardController โดยตั้งชื่อ Namespace เป็น Auth ให้เข้าไปที่โฟลเดอร์ /app/Http/Controllers/Auth ซึ่ง Laravel ได้สร้างให้เราอยู่แล้วตอนเราทำในขั้นตอนแรก จากนั้นสร้างไฟล์ DashboardController.php ดังต่อนี้

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class DashboardController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        echo 'Dashboard!';
    }
}

สังเกตจะมีการเรียก $this->middleware('auth'); ที่ Constructor เพื่อตรวจสอบว่า Login หรือยัง เราลองทดสอบโดยการเรียก http://your-app.dev/auth/dashboard ถ้าไม่ได้ Login ระบบจะ Redirect ไปหน้า Login ก่อนเข้าหน้านี้

วิธีตรวจสอบสิทธิ์การเข้าสู่ระบบด้วย Middleware Groups

หรือเราจะเปลี่ยนไปตรวจสอบสิทธิ์โดยใช้ Middleware Groups ไปวางไว้ที่ Route เลย โดยเข้าไปที่ไฟล์ /routes/web.php

ยกตัวอย่างเช่น จะต้อง Login เมื่อต้องการเข้า /auth/dashboard และ /auth/password โดยเราจะใส่ Path ไว้ใน Middleware Groups ดัง Code ด้านล่างนี้

Route::group(['middleware' => ['auth']], function () {
    Route::get('/auth/profile', function () { echo 'Profile'; });
    Route::get('/auth/password', function () { echo 'Change Password'; });
});

จริงๆแล้วสามารถตรวจสอบสิทธิ์ได้อีกหลายแบบ แต่ขอเขียนไว้เท่านี้ซึ่งนำไปใช้งานได้เพียงพอแล้ว และหากสนใจก็สามารถศึกษาเพิ่มเติมได้ที่ Document ของ Laravel ได้โดยตรงที่ https://laravel.com/

🚀 รับพัฒนาเว็บไซต์ & เว็บแอพพลิเคชั่น

สนใจดูตัวอย่างงานหรือสอบถามเพิ่มเติม ติดต่อได้เลยครับ โค้ดโมทีฟ (CodeMotive)