首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止用户检查未存在的urls,如何在Laravel 8.*中隐藏路由

如何防止用户检查未存在的urls,如何在Laravel 8.*中隐藏路由
EN

Stack Overflow用户
提问于 2021-08-26 13:42:05
回答 1查看 161关注 0票数 0

第一个问题用findOrFail方法求解

有没有办法阻止用户检查不存在的路线?

示例我有去http://127.0.0.1:8000/event/9的路线

但是不存在带有id 8的事件,如果用户要访问该id,就会进行以下操作:

代码语言:javascript
复制
Attempt to read property "photo_patch" on null (View: C:\xampp\htdocs\Laravel1\resources\views\frontend\eventView.blade.php) 

或数据库中的任何其他错误--该记录不存在。

第二个问题是如何打开laravel中的高级URL,所以我的页面上显示的是http://127.0.0.1:8000而不是http://127.0.0.1:8000/events之类的东西。

我知道它在配置文件中,但我找不到它。

使用它的示例类和路由:

代码语言:javascript
复制
-----------------------------Class----------------
public function eventView($id)
    {
        $notDisplay = Auth::user();
        $eventView = Event::findOrFail($id);
        if(!$notDisplay){
            $eventView->displayed = $eventView->displayed +1;
            $eventView->save();
        }

        return view('frontend/eventView', ['eventView' => $eventView]);
    }
----------------Route-----------------
Route::get('event/' . '{id}', [App\Http\Controllers\FrontendController::class, 'eventView'])->name('eventView');
EN

回答 1

Stack Overflow用户

发布于 2021-08-26 15:24:39

首先,使用容器!Laravel的服务容器非常强大,您的控制器解析用例是您应该使用的最常见的地方之一。url参数和控制器参数必须匹配才能工作。

你的路线:

代码语言:javascript
复制
Route::get('event/' . '{event}', [App\Http\Controllers\FrontendController::class, 'eventView'])->name('eventView');

你们的主计长:

代码语言:javascript
复制
public function eventView(Event $event)
    {
        return view('frontend/eventView', ['event' => $event]);
    }

当利用Laravel的依赖注入和容器时,您可以免费获得findOrFail()。您还应该删除您的auth检查,并使用路由中间件处理它。

在“美化”urls方面,Laravel的路由模型绑定特性允许您控制用于容器解析的模型的属性。例如,让我们假设您的事件有一个您希望使用的唯一段塞,而不是自动增量id:

代码语言:javascript
复制
Route::get('event/' . '{event:slug}', [App\Http\Controllers\FrontendController::class, 'eventView'])->name('eventView');

Laravel的路由功能提供了一个后备功能,如果路由模型绑定失败,您可以微调用户重定向的位置。

https://laravel.com/docs/8.x/routing#fallback-routes

防止未经授权的个人编辑他人的事件。我首先要设置的保护是在持久化时(当保存到数据库时)。虽然您可以在代码库中发生持久性的每一个地方都这样做,但是Laravel的观察者特性可能是非常合适的。这样,您就可以确信,无论向应用程序添加了什么代码,在对事件进行任何更改之前,始终会运行所有权检查。

https://laravel.com/docs/8.x/eloquent#observers

我要提供保护的第二个地方是在任何可以改变事件的路由上使用路由中间件。这样,在用户有机会尝试编辑之前,就可以将用户从他们不拥有的事件中重定向。

https://laravel.com/docs/8.x/middleware#assigning-middleware-to-routes

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68939657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档