我正在開發一個使用Microsoft Azure進行用戶管理(包括登錄)的Laravel 8應用程式。
我首先在他們的網站上關注本教程。
我在儀表板路由“下”有這些路由,我想用一個自定義中間件來保護它們:
// Dashboard routes
Route::get('/dashboard', [DashboardContoller::class, 'index'])->name('dashboard');
Route::group(['prefix' => 'dashboard' , 'middleware' => ['checkSignedIn']], function() {
Route::get('/users', [UsersContoller::class, 'index']);
Route::get('/create-user', [UsersContoller::class, 'create']);
Route::get('/delete-user/{id}', [UsersContoller::class, 'delete']);
});
允許用戶訪問應用程式儀表板的條件是:
他們使用有效的 Microsoft 帳戶登錄
他們的電子郵件在一系列允許的電子郵件中:
private $allowedEmails = [ '[email protected]', '[email protected]', '[email protected]', ];
為此,我做了以下作業:
創建了一個CheckSignedIn中間件,帶有php artisan make:middleware CheckSignedIn.
將上述中間件注冊在app\Http\Kernel.php:
protected $routeMiddleware = [
// More middleware
'checkSignedIn' => \App\Http\Middleware\CheckSignedIn::class,
];
在app\Http\Middleware\CheckSignedIn.php我有:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class CheckSignedIn {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
private $allowedEmails = [
'[email protected]',
'[email protected]',
'[email protected]',
];
public function handle(Request $request, Closure $next) {
$isSignedIn = null !== session('userName') && in_array(session('userEmail'), $this->allowedEmails);
if (!$isSignedIn) {
return redirect('/');
}
return $next($request);
}
}
問題
Evan 如果我沒有登錄,我仍然可以看到儀表板(/dashboard路線)。
這條線不應該也處理/dashboard路線嗎?
Route::group(['prefix' => 'dashboard' , 'middleware' => ['checkSignedIn']], function() {
我究竟做錯了什么?
uj5u.com熱心網友回復:
像這樣更改您的路線:
// Dashboard routes
Route::group(['prefix' => 'dashboard', 'middleware' => ['checkSignedIn']], function() {
Route::get('/', [DashboardContoller::class, 'index'])->name('dashboard');
Route::get('/users', [UsersContoller::class, 'index']);
Route::get('/create-user', [UsersContoller::class, 'create']);
Route::get('/delete-user/{id}', [UsersContoller::class, 'delete']);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/430639.html
