【发布时间】:2022-01-17 15:32:29
【问题描述】:
标题几乎概括了它。 我有一个 laravel 应用程序,我在我的笔记本电脑上开发并测试它何时在 127.0.0.1/8000 上运行 - 我刚刚为不同的用户(管理员、员工和门户用户)添加了中间件
当未登录并尝试访问管理路由 (127.0.0.1/8000/admin/reporting) 时,我成功被拒绝并重定向到主页。现在我将它推送到 GitHub 并在 ubuntu VM 上拉取,我仔细检查了这些更改。
但是当我访问服务器的 URL 时,我仍然可以访问所有页面而无需经过身份验证。
你们中有人遇到过类似的问题吗?我不确定我应该提供什么代码,所以请告诉我,我会将其添加到帖子中。
谢谢
编辑:中间件代码
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'admin' => \App\Http\Middleware\AdminMiddleware::class,
'employee' => \App\Http\Middleware\EmployeeMiddleware::class,
'portal' => \App\Http\Middleware\PortalMiddleware::class,
];
管理中间件:
public function handle(Request $request, Closure $next)
{
if (!Auth::user() || Auth::user()->abteilung_name != 'Geschäftsführung') {
return redirect('/')->with('redirect_error', 'Auf diese Seite haben Sie keinen Zugriff');
}
return $next($request);
}
员工中间件:
public function handle(Request $request, Closure $next)
{
if (!Auth::user() || !auth()->user()) {
return redirect('/')->with('redirect_error', 'Auf diese Seite haben Sie keinen Zugriff');
}
return $next($request);
}
门户中间件:
public function handle(Request $request, Closure $next)
{
if (!Auth::user() || !Auth::guard('portal')->user()) {
return redirect('/')->with('redirect_error', 'Auf diese Seite haben Sie keinen Zugriff');
}
return $next($request);
}
这是一个示例路由,所有其他看起来都差不多 - 只是最后的中间件因路由而异。
Route::get('/admin/reporting', [AdminController::class, 'getReportingView'])->name('reporting')->middleware('admin');
【问题讨论】:
-
您可以提供中间件...您确定您当前没有经过身份验证吗?
-
@lagbox 可以,请稍等。我通过了身份验证,我注销了,删除了 cookie,关闭了浏览器,但它仍然有效
-
这是在所有这些中间件中检查的同一用户
Auth::user()在每个中都是相同的警卫..!Auth::user() || !auth()->user()这是相同的检查两次 -
@lagbox 是的,它会检查某人是否经过身份验证,如果没有重定向到主页。管理员和员工保存在同一张表中,唯一的区别是他们工作的部门。那是
abteilung_name -
天哪。我已经用过这个命令百万次了,但我现在没有想到。现在可以了,非常感谢!!!!!! :D 雅皮士。您想将其添加为答案吗?所以我可以接受它
标签: php laravel apache authentication middleware