当前位置: 首页 > 知识库问答 >
问题:

Laravel 5.2:如何在中间件中使用auth

钮长恨
2023-03-14

我已经创建了一个新的中间件名称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');
//

});

但当我运行时,它要求我尝试获取非对象的属性,这意味着我不能在这里访问Auth类,有人能告诉我错误是什么以及如何在中间件中访问Auth Facade吗。

这是我的身份验证码

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);
    }
}

谢谢

共有1个答案

班浩皛
2023-03-14

这并不意味着你不能访问Auth类。这意味着,该用户没有经过身份验证,并且Auth::user()返回NULL。

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

if(Auth::check() && Auth::user()->role == 'admin'){
  return $next($request);
} else {
  return redirect('admin/login');
}
 类似资料:
  • 我正在使用Laravel5,我想知道如何使用Artisan命令(PHP)使用所有预定义方法生成RESTful资源控制器。 当我运行时,它会创建一个控制器,没有如下所示的方法: 我想要创建的是一个完整的Laravel RESTful资源控制器,其中包含所有预定义的方法,如:和。 我怎样才能做到这一点?

  • 我正在尝试使用typescript、mocha、sinon和chai http为我的express路由器编写一个集成测试。这个路由器使用我编写的自定义中间件,它检查头中的JWT。 理想情况下,我想存根我的authMiddleware,这样我就可以控制它的行为,而不必为每个测试用例提供有效/无效的JWT。 当我尝试在测试中存根时,我意识到Express使用的实际实现,而不是模拟的实现。 在模拟aut

  • 问题内容: 我有一个仅在特定条件下才能执行的函数(例如 role ==’Administrator’ )。现在,我使用 “ if” 语句。但是在某些情况下,情况可能会很多,而长定义的 “如果” 看起来并不那么美观。 Go(或与Go框架相关)中是否可用的机制允许实现中间件 概念 (动作过滤器)? 例如,ASP.NET MVC允许执行以下操作: 因此,在单独的类中实现的MyFilter()可以实现更好

  • Express is a routing and middleware web framework that has minimal functionality of its own: An Express application is essentially a series of middleware function calls. Middleware functions are funct

  • 我正在寻找使用中间件来解密超文本传输协议请求来到Azure功能在开始up.cs类 public类Startup:functions Startup { public override void Configure(IFunctionsHostBuilder builder){ if(builder = = null)throw new ArgumentNullException(null,new

  • 本文向大家介绍Asp.net Core中如何使用中间件来管理websocket,包括了Asp.net Core中如何使用中间件来管理websocket的使用技巧和注意事项,需要的朋友参考一下 介绍 我喜欢.NET CORE 这个东西,其实不仅仅源于它性能很高,可以跨平台,还因为它的设计模式确实令人着迷。以前没.NET CORE 的时候,.NET用websocket必须跑在windows serve