ต้องการเขียนระบบ 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,
...
];
About the author