ต้องการเขียนระบบ 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', 'HomeController@index') ->name ('home') ; */ Auth::routes () ;
Route::group (['middleware' => ['web', 'AuthenticateWithSession']], function () {
... Route::get ('/home', 'HomeController@index') ->name ('home') ;
...
}) ;
จากนั้นแนะนำให้ laravel รู้จัก middleware ที่สร้างขึ้นมาใหม่ โดยเปิดไฟล์ \app\Http\Kernel.php และเพิ่ม
protected $routeMiddleware = [
... /* custom */ 'AuthenticateWithSession' => \App\Http\Middleware\AuthenticateWithSession::class,
... ];