ต้องการเขียนระบบ login ง่ายๆ โดยไม่ใช้ database ในการเก็บ username และ password ในการ login
เริ่มด้วยการแก้ LoginController ให้ใช้เงื่อนไขใหม่แทนการดึงข้อมูลจากตาราง users
<?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; class LoginController extends Controller { /* |-------------------------------------------------------------------------- | Login Controller |-------------------------------------------------------------------------- | | This controller handles authenticating users for the application and | redirecting them to your home screen. The controller uses a trait | to conveniently provide its functionality to your applications. | */ use AuthenticatesUsers; /** * Where to redirect users after login. * * @var string */ protected $redirectTo = RouteServiceProvider::HOME; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest')->except('logout'); } /* custom */ // \vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php /** * Handle a login request to the application. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\Http\JsonResponse * * @throws \Illuminate\Validation\ValidationException */ public function login(Request $request) { Log::debug('login ' . $request->input('username') . ' == ' . env('LOGIN_USERNAME') . ' && ' . $request->input('password') . ' == ' . env('LOGIN_PASSWORD')); if ($request->input('password') === env('LOGIN_PASSWORD') && $request->input('username') === env('LOGIN_USERNAME')) { $request->session()->put('authenticated', time()); return redirect()->intended('home'); } return view('auth.login', [ 'message' => 'Provided PIN is invalid. ', ]); } }
เพิ่ม config ที่เก็บรหัสไว้ในไฟล์ .env เช่น
LOGIN_PASSWORD=phunsanit LOGIN_USERNAME=pitt
จากนั้นเขียน Middleware มาเช็คว่า session ใน function login มีหรือเปล่า ถ้ามีก็ให้ผ่าน ไม่มีก็ให้ไปหน้า login
<?php namespace App\Http\Middleware; use Closure; class AuthenticateWithSession { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if (!empty(session('authenticated'))) { $request->session()->put('authenticated', time()); return $next($request); } return redirect('/login'); } }
จากนั้นก็เลือก routes ที่จะใช้ middleware ที่เขียนขึ้นมาใหม่ โดยเปิดไฟล์ \routes\web.php
<?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ /* Route::get('/', function () { return view('welcome'); }); Route::get('/home', '[email protected]')->name('home'); */ Auth::routes(); Route::group(['middleware' => ['web', 'AuthenticateWithSession']], function () { ... Route::get('/home', '[email protected]')->name('home'); ... });
จากนั้นแนะนำให้ laravel รู้จัก middleware ที่สร้างขึ้นมาใหม่ โดยเปิดไฟล์ \app\Http\Kernel.php และเพิ่ม
protected $routeMiddleware = [ ... /* custom */ 'AuthenticateWithSession' => \App\Http\Middleware\AuthenticateWithSession::class, ... ];