ทำระบบ Authentication อย่างง่ายด้วย Laravel 5
การทำระบบ 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 แล้วได้
ตัวอย่างเช่น จะเปลี่ยนให้เมื่อ 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\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 เมื่อต้องการเข้า 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/
ส่วนบทความนี้ขอจบไว้เพียงเท่านี้ก่อนนะครับ