因為要使用Laravel 的auth starter kit: Breeze,今天來閱讀文件:
Laravel: Authentication Quickstart
使用Laravel的Auth Facades就可以直接取得授權的用戶,
也可以用Auth::check()
檢查用戶是否登入了。
use Illuminate\Support\Facades\Auth;
$user = Auth::user();
$id = Auth::id();
if (Auth::check()) {
// The user is logged in...
}
但比起Auth::check()
的方式,比較常見的是在route前直接加上middleware
Route::get('/flights', function () {
// Only authenticated users may access this route...
})->middleware('auth');
昨天在Laravel Middleware初探 /w Breeze-Day24也提到group起來的寫法:
Route::middleware('auth')->group(function () {
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});
也可以在Illuminate\Http\Request 實例中取得(也太方便了!!)
這樣在Controller裡面,我們都可以知道是誰在發Request
只要使用:->user()
方法
<?php
namespace App\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class FlightController extends Controller
{
/**
* Update the flight information for an existing flight.
*/
public function update(Request $request): RedirectResponse
{
$user = $request->user();
// ...
return redirect('/flights');
}
}
在app>Http>Middleware>Authenticate.php
我們可以看到Breeze幫我們的route做的auth設定。
這邊只要滿足expectsJson
(用 ajax 的方法来取得 json 格式數據),就不做任何事情,但條件不滿足的話,就會把用戶導回登入頁面。
protected function redirectTo(Request $request): ?string
{
return $request->expectsJson() ? null : route('login');
}
但expectsJson並不能幫我們驗證用戶登入了沒呀!
再繼續研究!