Laravel 5.2:如何在中间件中使用身份验证


Laravel 5.2: How to use auth in middleware

>我创建了一个新的中间件名称 Adminpanel

namespace App'Http'Middleware;
use Closure;
use Illuminate'Support'Facades'Auth;
class Adminpanel
{
    public function handle($request, Closure $next)
    {
        if(Auth::user()->role == 'admin'){
            return $next($request);
        }else{
            return redirect('admin/login');
        }
    }
}

并注册中间件

protected $routeMiddleware = [
    'auth' => 'App'Http'Middleware'Authenticate::class,
    'auth.basic' => 'Illuminate'Auth'Middleware'AuthenticateWithBasicAuth::class,
    'guest' => 'App'Http'Middleware'RedirectIfAuthenticated::class,
    'throttle' => 'Illuminate'Routing'Middleware'ThrottleRequests::class,
    'adminpanel' => 'App'Http'Middleware'Adminpanel::class,
];

和路线

Route::group(['middleware' => ['web','adminpanel']], function () {
Route::get('/admin/dashboard/', 'admin'Dashboard@index');
//

});

但是当我运行时,它问我试图获取非对象的属性,意味着我无法在这里访问身份验证类,有人可以告诉我错误是什么以及如何在中间件中访问身份验证外观。

这是我的身份验证代码

public function authenticate(Request $request)
{
    if (Auth::attempt(['email' => $request->input('email'), 'password' => $request->input('password'), 'role' => 'admin'], $request->input('remember'))) 
    {
        return redirect()->intended('admin/dashboard');
    }
    else{
        return redirect('admin')->with('response',-1);
    }
}

谢谢

这并不意味着

您无法访问身份验证类。这意味着,该用户未经过身份验证,并且 Auth::user() 返回 NULL。

确保只有经过身份验证的用户才能使用该路由的身份验证中间件访问您的路由,或者首先检查用户是否经过身份验证

if(Auth::check() && Auth::user()->role == 'admin'){
  return $next($request);
} else {
  return redirect('admin/login');
}