【发布时间】:2018-04-14 00:03:21
【问题描述】:
我想创建一个自定义中间件,只有当用户通过身份验证并且电子邮件是特定电子邮件时才能访问 /admin 页面。
虽然,当我指定我的自定义路由然后重定向时,它总是说重定向太多..
简短说明。
- 用户登录 -> 重定向到 /home。 (作品)
- 如果用户尝试访问 /admin 并且他们的电子邮件与中间件中指定的电子邮件不同,请重定向到 /home。
- 如果是真的,让他们进入 /admin
我的中间件叫做“admin.verify”
路线文件:
Route::get('/admin', 'AdminController@index')->name('admin.index');
管理员控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class AdminController extends Controller
{
public function __construct(){
$this->middleware(['auth', 'admin.verify']);
}
public function index(){
return view('admin.test');
}
}
中间件:
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::User()->email == 'Tester@gmail.com') {
return $next($request);
} else {
return redirect()->route('home');
}
我的家乡路线:
GET|HEAD | home | home| App\Http\Controllers\HomeController@index | web,auth
家庭控制器:
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('home');
}
}
【问题讨论】:
-
显示你的
home路由的定义。 -
你的中间件应该在路由文件中而不是在控制器中
-
@Option 为什么这么说?添加middleware to a controller 有效。
-
向问题添加了更多信息
-
如果用户未通过身份验证,
auth中间件会重定向到哪里?会不会是重定向到相同的home路由?
标签: php laravel laravel-5 middleware laravel-middleware