中间件,检查 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登录后重定向回来[关闭]