ต้องการเขียนระบบ login ง่ายๆ โดยไม่ใช้ database ในการเก็บ username และ password ในการ login
เริ่มด้วยการแก้ LoginController ให้ใช้เงื่อนไขใหม่แทนการดึงข้อมูลจากตาราง users
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | <?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 เช่น
1 2 | LOGIN_PASSWORD=phunsanit LOGIN_USERNAME=pitt |
จากนั้นเขียน Middleware มาเช็คว่า session ใน function login มีหรือเปล่า ถ้ามีก็ให้ผ่าน ไม่มีก็ให้ไปหน้า login
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?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 และเพิ่ม
1 2 3 4 5 6 7 | protected $routeMiddleware = [ ... /* custom */ 'AuthenticateWithSession' => \App\Http\Middleware\AuthenticateWithSession::class, ... ]; |