Laravel 5.2 多个 table 身份验证和中间件无法正常工作
Laravel 5.2 multiple table authentication and middleware together not working properly
我正在使用 laravel 5.2 多重 table(user, admin) 身份验证功能来使用两个 tables,一个用于用户,另一个用于管理员。除中间件功能外,一切正常。默认 'auth'(Authenticate.php) 不工作,我定制了一个 'auth.super_admin'(SuperAdminMiddleware.php) 来检查用户是否 admin 和结果相同。这是我的 auth.php 文件
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'admins' => [
'driver' => 'session',
'provider' => 'admins'
]
],
这是 Authenicate 中间件和 SuperAdminMiddleware 方法:
Authenticate.php
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
}
return $next($request);
}
SuperAdminMiddleware.php
public function handle($request, Closure $next)
{
if(\Auth::guard('admins')->check())
{
return $next($request);
}
return redirect('/');
}
因此,当我在控制器的构造函数中使用 'auth' 时,它不起作用并且会调用相应的方法。我做错了什么或错过了什么?
其实我已经解决了问题。这是解决方案
Authenticate.php
public function handle($request, Closure $next, $guard = null)
{
/*
|--------------------------------------------------------------------------
| Authenticate Middleware
|--------------------------------------------------------------------------
|
| This middleware is for checking whether user is from user table .
| and authenticated.
|
*/
if (!Auth::user()) {
return redirect('/');
}else
{
return $next($request);
}
}
SuperAdminMiddleware.php
/*
|--------------------------------------------------------------------------
| Authenticate Middleware(Super Admin check)
|--------------------------------------------------------------------------
|
| This middleware is for checking whether user is from admin table
| and super_admin .
|
*/
public function handle($request, Closure $next)
{
if (\Auth::guard('admins')->user()) {
if(\Auth::guard('admins')->user()->type == 'super_admin')
return $next($request);
return redirect('/');
}
return redirect('/');
}
我正在使用 laravel 5.2 多重 table(user, admin) 身份验证功能来使用两个 tables,一个用于用户,另一个用于管理员。除中间件功能外,一切正常。默认 'auth'(Authenticate.php) 不工作,我定制了一个 'auth.super_admin'(SuperAdminMiddleware.php) 来检查用户是否 admin 和结果相同。这是我的 auth.php 文件
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'admins' => [
'driver' => 'session',
'provider' => 'admins'
]
],
这是 Authenicate 中间件和 SuperAdminMiddleware 方法:
Authenticate.php
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
}
return $next($request);
}
SuperAdminMiddleware.php
public function handle($request, Closure $next)
{
if(\Auth::guard('admins')->check())
{
return $next($request);
}
return redirect('/');
}
因此,当我在控制器的构造函数中使用 'auth' 时,它不起作用并且会调用相应的方法。我做错了什么或错过了什么?
其实我已经解决了问题。这是解决方案
Authenticate.php
public function handle($request, Closure $next, $guard = null)
{
/*
|--------------------------------------------------------------------------
| Authenticate Middleware
|--------------------------------------------------------------------------
|
| This middleware is for checking whether user is from user table .
| and authenticated.
|
*/
if (!Auth::user()) {
return redirect('/');
}else
{
return $next($request);
}
}
SuperAdminMiddleware.php
/*
|--------------------------------------------------------------------------
| Authenticate Middleware(Super Admin check)
|--------------------------------------------------------------------------
|
| This middleware is for checking whether user is from admin table
| and super_admin .
|
*/
public function handle($request, Closure $next)
{
if (\Auth::guard('admins')->user()) {
if(\Auth::guard('admins')->user()->type == 'super_admin')
return $next($request);
return redirect('/');
}
return redirect('/');
}