【问题标题】:Protect routes in Laravel 5.1在 Laravel 5.1 中保护路由
【发布时间】:2016-02-11 23:35:53
【问题描述】:

我在我的项目中使用 Laravel 5.1。我正在尝试保护路线并确保只有登录用户才能访问某些路线。我知道中间件,但我想知道是否有人发布示例或链接来解释中间件以及如何使用中间件保护页面。

谢谢

【问题讨论】:

  • 嗨,萨扬!欢迎来到堆栈溢出 (SO)!要提出有用的问题,重要的是它们要具体且定义明确,并且非常感谢(并期望)展示您迄今为止所尝试的内容。另外,请花点时间联系Tour,它将帮助您掌握一切。您还将获得一个徽章;)

标签: php routes laravel-5.1


【解决方案1】:

要基于 Joe Rose 给出的答案,您还可以在控制器中而不是在 routes.php 文件中指定中间件。

例如,您可以像这样设置路线

Route::get('/example', 'ExampleController@index');
Route::post('/example/post', 'ExampleController@post');
Route::resource('blog', 'BlogController');

然后在你的控制器内部像这样引用它:

class ExampleController extends Controller
{
    public function __construct()
        {
            $this->middleware('auth');
        }
    //....

如果您正在寻找更多信息,请查看 Joe 提供的文档链接,以及 this blog post,其中解释了哪些中间件非常好,以及如何在需要时创建自己的。

【讨论】:

  • 感谢您的回答。你有一个例子如何在 Authenticate 中间件中实现句柄功能。我对那部分有点困惑。
  • @SajanSilwal 默认情况下,Laravel 在中间件文件夹 (app/Http/Middleware) 中附带 Authenticate.php。 handle 方法使用此行if ($this->auth->guest()) 检查用户是否为访客(即未登录),然后检查请求是否为 ajax 请求,如果是则返回 401 未经授权的请求消息行if ($request->ajax()),否则返回到登录页面else { return redirect()->guest('auth/login'); }否则如果您已登录,那么您将无法通过访客检查,您的请求将照常进行。
【解决方案2】:

您对使用中间件是正确的。包含的Auth 中间件是您应该使用的,只要您还使用包含的Auth 控制器来验证用户。你可以这样写你的路线:

Route::get('/page', array(
    'uses' => 'Controller@method',
    'middleware'=>'auth'
));

(上面的例子是使用GET请求,但也可以是其他类型的请求,例如POST)。

这将使用中间件的默认行为来检查用户是否已登录(经过身份验证)。您还可以扩展或覆盖内置函数,以允许您指导应用程序将用户发送到何处(如果他们已登录或未登录等)。Laravel 的官方文档是一个很好的起点:link

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2017-02-11
    • 2019-09-13
    • 2016-01-08
    • 2015-03-11
    • 1970-01-01
    • 2018-06-28
    • 2016-04-15
    • 1970-01-01
    相关资源
    最近更新 更多