laravel 中间件

  • 安装
composer create-project laravel/laravel LaravelMiddleware --prefer-dist
  • 常用的中间件:
auth 
log     php artisan make:middleware AdminOperationLog

  • Laravel 5管理中间件。
    现在,检查当前用户是否是管理员。因此,转到用户的表迁移文件,再添加一个名为isAdmin的字段,其数据类型为boolean。
<?php

// create_users_migrations

  public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email');
            $table->string('password');
            $table->boolean('isAdmin')->nullable();
            $table->rememberToken();
            $table->timestamps();
        });
    }

现在运行以下命令。

php artisan migrate

下一步是创建Laravel提供的身份验证功能。所以在你的终端输入以下内容。

  • Laravel 5.1身份验证。
  1. Laravel 登录认证对应的配置文件为config/auth.php:
php artisan make:auth //自动生成对应文件,5.1版本没这个功能

3、定义认证路由
关于用户认证,Laravel还自带了两个控制器App\Http\Controllers\Auth\AuthController.php和App\Http\Controllers\Auth\PasswordController.php,分别用于处理注册登录和密码重置。
有了控制器,我们接下来定义访问认证相关页面的路由:

// 认证路由...
Route::get('auth/login', 'Auth\AuthController@getLogin');
Route::post('auth/login', 'Auth\AuthController@postLogin');
Route::get('auth/logout', 'Auth\AuthController@getLogout');
// 注册路由...
Route::get('auth/register', 'Auth\AuthController@getRegister');
Route::post('auth/register', 'Auth\AuthController@postRegister');

4、创建认证视图
最后我们来定义注册登录对应的视图文件。首先我们创建注册视图resources/views/auth/register.blade.php:

<form method="POST" action="/auth/register">
    {!! csrf_field() !!}

    <div>
        用户名
        <input type="text" name="name" value="{{ old('name') }}">
    </div>

    <div>
        Email
        <input type="email" name="email" value="{{ old('email') }}">
    </div>

    <div>
        密码
        <input type="password" name="password">
    </div>

    <div>
        确认密码
        <input type="password" name="password_confirmation">
    </div>

    <div>
         <button type="submit">注册</button>
    </div>
</form>

然后我们创建登录视图resources/views/auth/login.blade.php:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
<!-- resources/views/auth/login.blade.php -->

<form method="POST" action="/auth/login">
    {!! csrf_field() !!}

    <div>
        Email
        <input type="email" name="email" value="{{ old('email') }}">
    </div>

    <div>
        Password
        <input type="password" name="password" id="password">
    </div>

    <div>
        <input type="checkbox" name="remember"> Remember Me
    </div>

    <div>
        <button type="submit">Login</button>
    </div>
</form>
</body>
</html>

键入以下命令启动服务器。
php artisan serve
现在创建三个用户。所以转到以下URL:http:// localhost:8000 / register
目前,我们还没有将任何用户分配给管理员,但我们可以手动完成。请记住,在实时Web应用程序中; 您需要提供一些界面来授予管理权限。在这里,我只是向您展示,如何在签署表格后处理管理中间件。

因此,将任何用户的isAdmin字段分配给数据库中的手动值1。

第3步:制作一个基本的L aravel中间件。
通过键入以下Laravel命令创建一个中间件。

php artisan make:middleware Admin
导航到以下目录。 app >> Http >>中间件>> Admin.php

你可以看到Laravel提供了一些样板。主要有一个函数需要处理,那就是handle()

// Middleware Admin.php

/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure n e x t ∗ @ r e t u r n m i x e d ∗ / p u b l i c f u n c t i o n h a n d l e ( next * @return mixed */ public function handle( next@returnmixed/publicfunctionhandle(request, Closure $next)
{
return n e x t ( next( next(request);
}
我们需要在这个函数中编写逻辑,以便我们可以过滤请求,如果满足,则转到目标页面,否则返回登录或任何重定向页面,您将提供。

我在这个函数中写了一个逻辑。

/** Admin.php
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure n e x t ∗ @ r e t u r n m i x e d ∗ / p u b l i c f u n c t i o n h a n d l e ( next * @return mixed */ public function handle( next@returnmixed/publicfunctionhandle(request, Closure $next)
{
if(auth()->user()->isAdmin == 1){
return n e x t ( next( next(request);
}
return redirect(‘home’)->with(‘error’,‘You have not admin access’);
}
现在,我需要在app >> Http >> Kernel.php中注册这个路由

您可以通过两种不同的方式注册此路线。

您可以注册为全局中间件。
您可以注册为称为路由中间件的特定路由 。
我们正在注册为路由中间件,因此,请转到 受保护的$ routeMiddleware属性。

<?php // Kernel.php protected $routeMiddleware = [ 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'admin' => \App\Http\Middleware\Admin::class, ]; 在这里,您可以看到,我添加了名为admin的自定义中间件 。 现在,如果我们想要将任何路由分配给此中间件 管理员, 则此路由现在受到保护,并且只有在授权用户为admin时才可访问,否则它将重定向到主页。 第4步: 管理员保护的路由中间件。 创建一个需要受管理员保护的路由,如果用户不是管理员,则会重定向到主页,否则他可以访问此页面。 <?php // web.php Route::get('admin/routes', 'HomeController@admin')->middleware('admin'); 现在,我们只需要在用户登录后将此链接放在主页上。 @extends('layouts.app') @section('content')
@if(\Session::has('error'))
{{\Session::get('error')}}
@endif
Dashboard
@endsection 现在,我们只需要在HomeController中对admin函数进行编码。 <?php // HomeController.php namespace App\Http\Controllers; use Illuminate\Http\Request; class HomeController extends Controller { /** * Show the application dashboard. * * @return \Illuminate\Http\Response */ public function index() { return view('home'); } public function admin() { return view('admin'); } } 第5步:制作一个刀片文件。 在views文件夹的根目录中创建一个名为admin.blade.php的视图。 ADMIN PAGE WELCOME TO ADMIN ROUTE 现在,转到登录页面并使用isAdmin字段1登录 这是Laravel 5.4的登录页面 Laravel 5中间件教程 登录后,这是我的屏幕看起来像这样。 Laravel 5.4中间件 您以管理员身份登录; 你可以看到以下页面。 如果您以普通用户身份登录,那么您将重定向到同一页面,就像我们的情况一样,它是一个主页,出现以下错误。 Laravel路线中间件 Laravel 5 Group Middleware <?php // web.php Route::group(['middleware' => ['admin']], function () { Route::get('admin/routes', 'HomeController@admin'); }); 我们可以使用中间件组将一个中间件分配给多个路由。这很容易。 如果我不想显示普通用户的管理员链接,那么我已经设置了一个条件,如果验证用户是管理员然后我们可以告诉他该路由,否则不会。但在这个例子中,我没有提出类似的东西。 我只是想告诉你,如果你不是管理员,你仍然会尝试访问这条路线,那么你将使用正确的信息重定向。 单路中的多个中间件 我们可以一次将两个中间件放入一条路径中。 Route::get('admin/routes', 'HomeController@admin')->middleware(['admin','auth']); Autra中间件由Laravel提供 <?php // Kernel.php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { /** * The application's global HTTP middleware stack. * * These middleware are run during every request to your application. * * @var array */ protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, ]; /** * The application's route middleware groups. * * @var array */ protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ 'throttle:60,1', 'bindings', ], ]; /** * The application's route middleware. * * These middleware may be assigned to groups or used individually. * * @var array */ protected $routeMiddleware = [ 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, ]; } 身份验证和来宾 中间件与用户身份验证相关。 VerifyCSRFToken是另一个中间件,它是全局中间件,可以保护我们免受每个POST请求中的跨站点请求伪造攻击。 这 TokenMismatchException 由该抛出中间件如果POST请求不包含CSRF令牌。 这就是Laravel Middleware Tutorial。 Github:https: //github.com/KrunalLathiya/Middleware 使用Github代码的步骤 在您当地克隆回购。 转到项目的根目录并运行命令“composer update”。 编辑.env文件并使用您的MySQL数据库凭据。 在用户表中添加一个管理字段。 运行命令“ php artisan migrate”。 现在,我们需要引导Laravel服务器,以便运行“php artisan serve”。 如果现在转到此URL:http:// localhost:8000 /注册 并 创建三个新用户并将用户的一个管理员值更改为一个 现在以三个不同的用户登录并单击主页中的admin链接,如果您在该链接的路由中应用了中间件,那么它将按照我上面的描述工作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Laravel 中,注册中间件需要遵循以下步骤: 1. 创建中间件类 首先,你需要创建一个中间件类。可以使用 Artisan 命令 `php artisan make:middleware <middleware-name>` 来创建一个新的中间件类。 例如,如果要创建一个名为 `CheckAge` 的中间件,可以运行以下命令: ``` php artisan make:middleware CheckAge ``` 该命令将在 `app/Http/Middleware` 目录中创建一个名为 `CheckAge.php` 的中间件类。 2. 编写中间件逻辑 在中间件类中,你需要实现 `handle` 方法来定义中间件要执行的逻辑。`handle` 方法接收两个参数:`$request` 和 `$next`。 `$request` 是当前请求的实例,而 `$next` 是下一个中间件或路由的闭包。 例如,以下是一个简单的 `CheckAge` 中间件,用于检查用户的年龄是否大于 18 岁: ```php <?php namespace App\Http\Middleware; use Closure; class CheckAge { public function handle($request, Closure $next) { if ($request->age < 18) { return redirect('home'); } return $next($request); } } ``` 在上面的例子中,如果用户的年龄小于 18 岁,则中间件将重定向到 `home` 路由,否则将继续执行下一个中间件或路由。 3. 注册中间件 完成中间件类后,你需要将其注册到应用程序中。可以在 `app/Http/Kernel.php` 文件中找到中间件注册表。 该文件包含了一个 `$middleware` 数组,其中包含了全局中间件。你也可以将中间件分组并定义在 `$middlewareGroups` 数组中,或者将它们定义在单独的 `$routeMiddleware` 数组中,并通过路由中间件来使用它们。 例如,以下是一个将 `CheckAge` 中间件注册为全局中间件的示例: ```php protected $middleware = [ \App\Http\Middleware\CheckAge::class, ]; ``` 或者,你可以将其注册为路由中间件: ```php protected $routeMiddleware = [ 'checkAge' => \App\Http\Middleware\CheckAge::class, ]; ``` 现在,你可以在路由中使用 `checkAge` 中间件来检查用户的年龄: ```php Route::get('profile', function () { // })->middleware('checkAge'); ``` 或者,你可以将其添加到控制器的构造函数中: ```php public function __construct() { $this->middleware('checkAge'); } ``` 以上就是 Laravel 中注册中间件的步骤。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值