การทำระบบ 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 จากนั้นให้แก้ไขตามลิงค์นี้

Laravel 5.5 แก้ข้อผิดพลาด Specified key was too long

จากนั้นลองสั่ง “php artisan migrate” ตามด้านบนอีกครั้งนึง

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

วิธีใช้งาน

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

Auth::routes();
Route::get('/home', '[email protected]')->name('home');

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

ตัวอย่างเช่น จะเปลี่ยนให้เมื่อ Login แล้วไปยัง /auth/dashboard วิธีการให้เข้าไปเปลี่ยนค่าตามไฟล์และตัวแปรดังต่อไปนี้

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

เข้าไปที่ไฟล์ /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\[email protected] ดังนี้

Route::get('/auth/dashboard', 'Auth\[email protected]');

วิธีตรวจสอบสิทธิ์การเข้าสู่ระบบใน 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 เมื่อต้องการเข้า URL http://your-app.dev/auth/dashboard และ http://your-app.dev/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/

ส่วนบทความนี้ขอจบไว้เพียงเท่านี้ก่อนนะครับ

Author: ศิริชัย ธีรภัทรสกุล เป็นนักพัฒนาเว็บไซต์ และผู้ก่อตั้ง "เมมโมเอท" เริ่มทำงานมาตั้งแต่ปี พ.ศ. 2547 ประสบการณ์ความรู้ความสามารถที่สั่งสมมา มีทั้งการเขียนโปรแกรม, งานออกแบบ UX/UI และวิเคราะห์ระบบ จึงทำให้มีความเข้าใจคนทำธุรกิจ เพื่อที่จะทำระบบออกมาให้ใช้งานได้จริงตรงตามจุดประสงค์

Leave a Comment