【发布时间】:2015-11-09 03:37:26
【问题描述】:
我创建了两个中间件来保护用户路由和管理员路由
我的 UserMiddleware 看起来像这样
<?php
namespace App\Http\Middleware;
use Auth;
use Closure;
class UserMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::user()->hasRole('user')) {
return $next($request);
}
throw new \Exception("Unauthorized");
}
}
这是我的管理中间件
<?php
namespace App\Http\Middleware;
use Auth;
use Closure;
use App\Role;
class AdminMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::user()->hasRole('admin')) {
return $next($request);
}
throw new \Exception("Unauthorized");
}
}
现在我想要的是当管理员登录时,我想要一个管理仪表板打开,当用户登录时,我希望用户仪表板打开,但现在,它只在我重定向到管理员路由时尝试从用户和管理员登录,我有这样的用户保护路线
Route::group(['middleware' => 'auth', 'user'], function () {
//all user routes
});
和管理员保护的路由
Route::group(['middleware' => 'auth', 'admin'], function () {
//all admin routes
});
在我的 kernel.php 中,我也添加了
'admin' => \App\Http\Middleware\AdminMiddleware::class,
'user' => \App\Http\Middleware\UserMiddleware::class,
这就是我在控制器中验证登录的方式
$loginData = array(
'email' => Input::get('email'),
'password' => Input::get('password'),
'confirmed' => 1
);
/*
* Checking against the record in database whether the email and password is valid
* Or the record exists in the database
*/
if (Auth::validate($loginData)) {
if (Auth::attempt($loginData)) {
return Redirect::intended('dashboard');
}
}
else {
// if any error send back with message.
Session::flash('error', 'Invalid Email/Password Combination');
return Redirect::to('login');
}
如何使我的中间件工作并在管理员日志时显示管理仪表板,在用户登录时显示用户仪表板。这给我带来了一个大问题。
【问题讨论】:
标签: php laravel routing laravel-5 laravel-5.1