当我尝试访问注销路由时,我总是被重定向到 /home 路由。
我到注销控制器的路线(account.php):
Route::group([
'middleware' => ['account'],
'as' => 'public.account.',
'namespace' => 'Auth',
], function () {
Route::group(['prefix' => 'conta'], function () {
Route::post('logout', [
'as' => 'logout',
'uses' => 'App\Http\Controllers\Auth\LoginController@logout',
]);
});
});
验证.php
<?php
namespace App\Http\Middleware\Acl;
use Closure;
use Illuminate\Auth\Middleware\Authenticate as BaseAuthenticate;
class Authenticate extends BaseAuthenticate
{
public function handle($request, Closure $next, ...$guards)
{
$this->authenticate($request, $guards);
if (! $guards) {
$route = $request->route();
$flag = $route->getAction('permission');
if ($flag === null) {
$flag = $route->getName();
}
$flag = preg_replace('/.create.store$/', '.create', $flag);
$flag = preg_replace('/.edit.update$/', '.edit', $flag);
if ($flag && ! $request->user()->hasAnyPermission((array)$flag)) {
if ($request->expectsJson()) {
return response()->json(['message' => 'Unauthenticated.'], 401);
}
return redirect()->route('dashboard.index');
}
}
return $next($request);
}
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
return route('public.account.login');
}
}
}
内核.php
protected $middlewareAliases = [
...
'account' => \App\Http\Middleware\Acl\Authenticate::class,
];
我的想法是为 1 类用户提供此中间件,并为所有其他管理用户使用 ACL 进行身份验证。
非常感谢您的帮助!
由于
account
中间件仅应用于特定类型的用户,因此您应该在 account
中间件之前应用 auth
中间件。因此,当用户访问 logout
路由时,将首先针对 account
中间件进行检查,如果匹配,则不会被重定向到 /home
路由。Route::group([
'as' => 'public.account.',
'namespace' => 'Auth',
], function () {
Route::middleware(['account'])->group(function () {
Route::group(['prefix' => 'conta'], function () {
Route::post('logout', [
'as' => 'logout',
'uses' => 'App\Http\Controllers\Auth\LoginController@logout',
]);
});
});
// Other routes
});