中间件,检查 Laravel 5 后如何重定向

Posted

技术标签:

【中文标题】中间件,检查 Laravel 5 后如何重定向【英文标题】:Middleware, how to redirect after check Laravel 5 【发布时间】:2015-05-17 17:34:36 【问题描述】:

我需要在检查用户是否以编辑者身份登录后,重定向到个人资料页面...

这是我的代码:

<?php namespace App\Http\Middleware;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;

use Closure;

class AdminMiddleware 

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    
        if(Auth::check())
                    if(Auth::user()->roles->toArray()[0]['role'] == 'editor')
                       return redirect('/profile');
                    
                    return $next($request);
                
                else
                

                   return $next($request);
                
    


这段代码的问题是当用户是编辑器时,我得到了无限循环......

这是我的路线:

Route::group(['middleware' => 'auth'], function()

    Route::get('home', ['middleware' => 'admin', function()
        
        return view('home');
        ]);
    Route::get('profile', array(
       'as' => 'profile',
       'uses' => 'UserController@getProfile'
    ));


);

有谁知道问题出在哪里?

【问题讨论】:

当然,如果你的 '/profile' 路由使用相同的中间件,那么它会一直重定向到它自己。考虑您的路由结构。 请发布您的路线 已添加.... auth 用户有两条路由... 你在 App\Http\Kernel 哪里注册了你的中间件?在受保护的 $middleware = [] 或受保护的 $routeMiddleware = [] 下?如果您在 $middleware 中注册它,它将在每个请求上运行,从而导致无限循环,所以如果是这样,请仅使用 $routeMiddleware 太棒了!数字限制谢谢。 【参考方案1】:

您在App\Http\Kernel 的哪里注册了您的中间件?

它是在受保护的$middleware = [] 还是protected $routeMiddleware = [] 中?

如果在 $middleware 注册,它将在每个请求上运行,从而导致无限循环,如果是这样,请仅使用 $routeMiddleware

【讨论】:

有同样的问题,这并没有解决它,中间件在 $routeMiddleware 已经不是 $middleware。 让我看看你的中间件和内核 我看不到您的内核和中间件有任何问题,因为它们没有受到影响。问题可能来自您的路线。让我也看看你的路线 完成。更新了链接以包含我的路线,请为我再次检查。 让我们continue this discussion in chat.【参考方案2】:

我发现这是一个更少的代码和更少的基于角色重定向用户的决策,把它放在你的 AuthController.php 中

protected function authenticated( $user)


    if($user->user_group == '0') 
        return redirect('/dashboard');
    

    return redirect('my-account');

https://laracasts.com/discuss/channels/laravel/how-best-to-redirect-admins-from-users-after-login-authentication

【讨论】:

【参考方案3】:

转到Kernel.php。它在app\http。 尝试找到protected $routeMiddleware 在那个数组中你需要添加这个

'admin' => \App\Http\Middleware\AdminMiddleware::class

之后它应该可以正常工作。 希望这对面临同样问题的人有所帮助。

【讨论】:

以上是关于中间件,检查 Laravel 5 后如何重定向的主要内容,如果未能解决你的问题,请参考以下文章

如何重定向到Laravel 5.6中的以前的URL并打算使用

如何将客人重定向到登录页面,在laravel 5.2登录后重定向回来[关闭]

登录和注销后如何重定向 - laravel 5

Laravel 在中间件内部重定向?

Laravel 5 中间件 https 上的 aws ec2 重定向循环

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