Laravel 5.2 - 在中间件请求中获取路由组名称

Posted

技术标签:

【中文标题】Laravel 5.2 - 在中间件请求中获取路由组名称【英文标题】:Laravel 5.2 - Get route group name in middleware request 【发布时间】:2017-07-03 01:35:57 【问题描述】:

我正在开发一个中间件,以处理访客重定向到保护区的问题。我有 2 个登录页面,一个用于前端,另一个用于后端,并希望客人根据他们进入的位置重定向到每个登录页面。我的意思是:

如果访客进入/admin/dashboard 之类的路线,则必须将其重定向到/admin/login。 如果客人进入路线/messages,他们必须被重定向到/login

这是我的 routes.php

Route::get('/', function () 
    return view('inicio');
);

Route::group(['as'=>'clientRoutes', 'middleware'=>'loginSelector'], function()
    Route::get('/polizas', function () 
        return view('cliente.polizas');
    );
);

Route::group(['as'=>'adminRoutes','prefix'=>'admin', 'middleware'=>'loginSelector'], function()
    Route::get('/inicio', function () 
        return view('admin.inicio');
    );
    Route::get('/lista', function () 
        return view('admin.lista');
    );
);
Route::get('/admin/login', function () 
    return view('admin.login');
);

在中间件中,我试图获取路由的组名,但找不到获取 i 的方法,如下所示:

namespace App\Http\Middleware;

use Closure;

class CustomAuthRedirectMiddleware

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    
        $grupoRoute = $request->route()->getGroup();
        if($grupoRoute == "adminRoutes")
            return redirect('/admin/login');
        else
            return redirect('/login');
        

        return $next($request);
    

如果可能的话,我如何使用组名进行重定向?或者如果不可能,如何实现这种重定向?

【问题讨论】:

你可以试试这个:***.com/questions/36838177/… @Samsquanch 非常感谢。将其发布为答案,以便标记为正确并请为您投票。这就是我要找的... 您可以继续发布您如何解决它作为答案,因为我只能猜测。我认为这将是一个更好的解决方案。只需在您的帖子中引用该链接即可。 完美,谢谢! 【参考方案1】:

感谢@Samsquanch 提供的link,我解决了这个问题。

这是中间件代码:

public function handle($request, Closure $next)

    $routeName = $request->route()->getName();
    if(strpos($routeName, 'adminRoutes.') === 0)
        if(!Auth::user())
            return redirect('/admin/login');
        
    elseif(strpos($routeName, 'clientRoutes.') === 0)
        if(!Auth::user())
            return redirect('/login');
        
    

    return $next($request);

这些是我的路线:

Route::group(['as'=>'clientRoutes.', 'middleware'=>'loginSelector'], function()
    Route::get('/polizas', function () 
        return view('cliente.polizas');
    );
);

Route::group(['as'=>'adminRoutes.','prefix'=>'admin', 'middleware'=>'loginSelector'], function()
    Route::get('/inicio', function () 
        return view('admin.inicio');
    );
    Route::get('/lista', function () 
        return view('admin.lista');
    );
);
Route::get('/admin/login', function () 
    return view('admin.login');
);

当我转到 url /admin/lista 时,我被重定向到 /admin/login,当我到达 /polizas 时,我被重定向到 /login

如果您使用我的解决方案,您必须注意每个登录表单中发生的情况,具体取决于经过身份验证的用户角色。

【讨论】:

以上是关于Laravel 5.2 - 在中间件请求中获取路由组名称的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 5.2 中禁用特定路由的 Web 中间件

laravel 5.2 如何在刀片中获取路由参数?

Laravel AJAX 请求进入路由 api Vue 错误

如何从 db 中的两个表中路由、获取和显示数据到 laravel 5.2 中的单个网页

身份验证控制器中的 Laravel 5.2 Web 中间件导致 csrf 令牌不匹配

在 Laravel 5.2 上路由文件路径时出现 405(不允许的方法)