การทำระบบ 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/