laravel 注销不适用于自定义中间件

问题描述 投票:0回答:1

当我尝试访问注销路由时,我总是被重定向到 /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 进行身份验证。

非常感谢您的帮助!

php laravel authentication middleware logout
1个回答
0
投票

由于

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
});

© www.soinside.com 2019 - 2024. All rights reserved.