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

在laravel的自定义中间件中使用会话

卫宏硕
2023-03-14

我有一个简单的中间件,它检查用户会话中是否有密钥。

<?php

namespace App\Http\Middleware;

use Closure;

class CustomAuth
{
    public function handle($request, Closure $next)
    {
        if($request->session()->has('uid')){
            return $next($request);
        }
        else{
            return view('unauth');
        }
    }
}

问题是我总是得到“未按请求设置会话存储”错误这是我的路线:

Route::get('home', function () {
        return view('home');
    })->middleware('web', 'CustomAuth');

我在app\Http\K中添加了中间件ernel.php变量$middleware

protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \App\Http\Middleware\CustomAuth::class
    ];

我也试着改变我的路线:

Route::group(['middleware' => ['web']], function () {
    Route::get('home', function () {
        return view('home');
    })->middleware('CustomAuth');
});

但这不起作用。知道如何确保会话已经启动,或者在调用中间件之前启动它吗?我用的是Laravel 5.3

共有1个答案

酆景辉
2023-03-14

L5中间件由3种“类型”组成。

配置可以在内核中找到。HTTP请求的php文件(通常是App\Http\Kernel。有一个全局中间件,它将为所有请求运行,并在$middleware中声明;有一个路由组中间件,它将为给定路由组的所有请求运行,并在$middlewareGroups中声明。默认情况下,在web中声明的所有路由。php被认为是web路由,因此所有我们b中间件适用。

第三种类型是路由中间件。它们以“中间件名称”的形式在数组中声明=

Route::get("/route", function () { /* route body */ })->middleware("middlewareName");

这些是按全球顺序运行的

澄清

当重新阅读这篇文章时,这意味着您需要在$middeware变量中声明中间件才能使用它们。事实并非如此,还允许使用以下语法:

Route::get("/route", function () { 
   /* route body */ 
})->middleware(Middleware::class);

但是,这种语法不允许您在使用中间件时向其提供参数,例如在使用身份验证中间件时(其中api将是传递给中间件的参数)。

 类似资料:
  • 我正在开发一个Laravel ACL系统。我的基本表是,透视表是。 我想使用我的自定义中间件检查用户权限。我试过这种方法,但效果不好。每个用户都可以访问所有具有或不具有的权限。 现在,我该如何解决这个问题。请看我的代码示例。 我的控制器。 我的中间件。 还有,我的模型方法。

  • 中间件是 WebHook 的一种变种模式,不同的是它早于 WebHook 执行,你可以做一些有用的前置拦截,比如 token 校验、日志记录等等。 实现一个中间件可以参考一个例子: public class BasicAuthMiddleware implements WebHook { private static final int AUTH_LENGTH = 6; priv

  • 嗨,我对auth()有问题- 这里是一个简单的服务提供商 一条简单的路线。 我在Kernel.php注册了中间件 然后我只是在aController.php中调用_构造函数 我知道名字是愚蠢的名字,但这只是一个例子,我只是在学习。 谢谢你的回答。 PS:所有这些文件都在/vendor文件夹中 即使在_构造函数(){$This中使用,也会发生这种情况-

  • 我正在尝试在Laravel 5.6中创建一个自定义帮助器 我的助手路径是app\Helpers\ReadExcel。php 以下是我的助手文件: 我的助手的服务提供商如下 在: 我尝试在控制器方法中使用帮助器,如下所示: 我得到的错误如下: 找不到类“ReadExcel” 请帮我这个。我不确定错在哪里。

  • 问题内容: 我正在尝试创建中间件,以有选择地将kwarg传递给满足条件的每个视图。 问题是我找不到如何设置中间件的示例。我已经看到了覆盖我想要的方法的类: 但是我该把课程放在哪里?我是否创建一个中间件应用程序并将其放在其中,然后在其中引用它? 问题答案: 第一:路径结构 如果没有,则需要按照以下结构在应用程序中创建中间件文件夹: 文件夹中间件应与settings.py,URL,模板…放置在同一文件

  • 问题内容: 我将Laravel应用程序从4升级到5。但是,我有一个自定义验证器,无法使用。 在L4中,我制作了一个 validators.php 文件,并使用将其包含在 global.php 中。 我尝试在L5中做一些相同的事情。我在 app / Validators / Validators.php中 放置了一个验证 器 ,并更新了 composer.json 。 但是,现在任何页面上都没有呈现