【问题标题】:Laravel - localhost redirected you too many times - middleware not workingLaravel - 本地主机重定向你太多次 - 中间件不起作用
【发布时间】:2018-01-25 19:45:09
【问题描述】:

我创建了一个中间件,用于将用户重定向到某个网页,除非某个用户已登录。我还想包含一个例外,此中间件适用于哪些路由。然而,我收到错误“本地主机重定向你太多次”。为什么会这样?这是我的代码:

web.php

Route::get('/lanzamiento', function () {
    return view('coming-soon');
})->name('coming.soon');

内核.php

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,
    \App\Http\Middleware\TrustProxies::class,
    \App\Http\Middleware\ComingSoon::class,
];

ComingSoon.php(我创建的中间件)

namespace App\Http\Middleware;

use Closure;
use Auth;

class ComingSoon
{
    public function handle($request, Closure $next)
    {
      if (!Auth::check()) {
        return redirect()->route('coming.soon');
      }
      if (Auth::user()->email != 'joaquin@test.com') {
        return redirect()->route('coming.soon');
      }
      return $next($request);
    }

protected $except = [
  '/lanzamiento'
];
}

提前致谢!

** 编辑 - 路线列表 **

+--------+----------------------------------------+-----------------------------------------------------------------+---------------------------------+---------------------------------------------------------------------------------+--------------+
| Domain | Method                                 | URI                                                             | Name                            | Action                                                                          | Middleware   |
+--------+----------------------------------------+-----------------------------------------------------------------+---------------------------------+---------------------------------------------------------------------------------+--------------+
|        | GET|HEAD                               | /                                                               |                                 | Closure                                                                         | web          |
|        | POST                                   | alquilar/detallealquiler/{id}/{horariollegada}/{horariopartida} | alquiler.detalle                | App\Http\Controllers\EspaciosController@detalleAlquiler                         | web          |
|        | POST                                   | alquilar/disponible/{id}/{horariollegada}/{horariopartida}      | alquiler.disponible             | App\Http\Controllers\EspaciosController@disponible                              | web          |
|        | POST                                   | alquilar/{id}                                                   | alquilar                        | App\Http\Controllers\AlquileresController@alquilar                              | web          |
|        | GET|HEAD                               | anfitrion                                                       |                                 | Closure                                                                         | web          |
|        | GET|HEAD                               | api/user                                                        |                                 | Closure                                                                         | api,auth:api |
|        | POST                                   | cargar-vehiculo/datos                                           | create.upload.vehicle           | App\Http\Controllers\UploadVehicleController@UploadVehicle                      | web,auth     |
|        | GET|HEAD                               | cargar-vehiculo/datos                                           | show.upload.vehicle             | App\Http\Controllers\UploadVehicleController@showUploadVehicle                  | web,auth     |
|        | GET|HEAD                               | cargar-vehiculo/datos/editar/{id?}                              | show.edit.vehicle               | App\Http\Controllers\UploadVehicleController@showEditVehicle                    | web,auth     |
|        | PUT                                    | cargar-vehiculo/datos/editar/{id}                               | edit.vehicle                    | App\Http\Controllers\UploadVehicleController@editVehicle                        | web,auth     |
|        | DELETE                                 | cargar-vehiculo/datos/{id}                                      | delete.vehicle                  | App\Http\Controllers\UploadVehicleController@deleteVehicle                      | web,auth     |
|        | GET|HEAD                               | creditos                                                        |                                 | Closure                                                                         | web          |
|        | GET|HEAD                               | espacio/{id}                                                    | show.espacio                    | App\Http\Controllers\EspaciosController@showEspacio                             | web          |
|        | GET|HEAD                               | faqs                                                            |                                 | Closure                                                                         | web          |
|        | GET|HEAD                               | home                                                            | home                            | App\Http\Controllers\HomeController@index                                       | web          |
|        | POST                                   | lanzamiento                                                     |                                 | App\Http\Controllers\ContactController@sendContact                              | web          |
|        | GET|HEAD                               | lanzamiento                                                     | coming.soon                     | Closure                                                                         | web          |
|        | GET|HEAD                               | login                                                           | login                           | App\Http\Controllers\Auth\LoginController@showLoginForm                         | web,guest    |
|        | POST                                   | login                                                           |                                 | App\Http\Controllers\Auth\LoginController@login                                 | web,guest    |
|        | GET|HEAD                               | login/{provider}                                                |                                 | App\Http\Controllers\Auth\SocialAuthController@redirectToProvider               | web,guest    |
|        | GET|HEAD                               | login/{provider}/callback                                       |                                 | App\Http\Controllers\Auth\SocialAuthController@handleProviderCallback           | web,guest    |
|        | POST                                   | logout                                                          | logout                          | App\Http\Controllers\Auth\LoginController@logout                                | web          |
|        | GET|HEAD                               | mantenimiento                                                   |                                 | Closure                                                                         | web          |
|        | POST                                   | password/email                                                  | password.email                  | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail           | web,guest    |
|        | POST                                   | password/reset                                                  |                                 | App\Http\Controllers\Auth\ResetPasswordController@reset                         | web,guest    |
|        | GET|HEAD                               | password/reset                                                  | password.request                | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm          | web,guest    |
|        | GET|HEAD                               | password/reset/{token}                                          | password.reset                  | App\Http\Controllers\Auth\ResetPasswordController@showResetForm                 | web,guest    |
|        | GET|HEAD                               | perfil                                                          | profile                         | App\Http\Controllers\ProfileController@mostrarPerfil                            | web,auth     |
|        | POST                                   | perfil/editar-imagen                                            | update_profile_image            | App\Http\Controllers\ProfileController@updateProfileImage                       | web          |
|        | GET|HEAD                               | perfil/editar-imagen                                            | show.update.profile.image       | App\Http\Controllers\ProfileController@showUpdateProfileImage                   | web          |
|        | GET|HEAD                               | politica-y-privacidad                                           |                                 | Closure                                                                         | web          |
|        | GET|HEAD                               | quienes-somos                                                   |                                 | Closure                                                                         | web          |
|        | POST                                   | register                                                        |                                 | App\Http\Controllers\Auth\RegisterController@register                           | web,guest    |
|        | GET|HEAD                               | register                                                        | register                        | App\Http\Controllers\Auth\RegisterController@showRegistrationForm               | web,guest    |
|        | GET|HEAD                               | resultados                                                      | show.search                     | App\Http\Controllers\EspaciosController@search                                  | web          |
|        | GET|HEAD                               | signin                                                          |                                 | App\Http\Controllers\Auth\LoginController@showLoginForm                         | web,guest    |
|        | GET|HEAD                               | signup                                                          |                                 | App\Http\Controllers\Auth\RegisterController@showRegistrationForm               | web,guest    |
|        | GET|HEAD                               | testfunction                                                    | test                            | App\Http\Controllers\EspaciosController@test                                    | web          |
|        | GET|HEAD                               | upload-espacio/diasyhorarios/{espacio}                          | upload.espacio.3                | App\Http\Controllers\UploadEspacioController@showUploadEspacio3                 | web,auth     |
|        | PUT                                    | upload-espacio/diasyhorarios/{id}                               | insert.upload.espacio.3         | App\Http\Controllers\UploadEspacioController@insertAndShowUploadEspacio3        | web,auth     |
|        | DELETE                                 | upload-espacio/espacio/{id}                                     | delete.espacio                  | App\Http\Controllers\UploadEspacioController@deleteEspacio                      | web,auth     |
|        | POST                                   | upload-espacio/estadias                                         | create.espacio.upload.espacio.2 | App\Http\Controllers\UploadEspacioController@createEspacioAndShowUploadEspacio2 | web,auth     |
|        | GET|HEAD                               | upload-espacio/estadias/{espacio}                               | upload.espacio.2                | App\Http\Controllers\UploadEspacioController@showUploadEspacio2                 | web,auth     |
|        | PUT                                    | upload-espacio/estadias/{id}                                    | insert.upload.espacio.2         | App\Http\Controllers\UploadEspacioController@insertAndShowUploadEspacio2        | web,auth     |
|        | GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS | upload-espacio/infogeneral/editar/{espacio}                     | editar.upload.espacio.1         | App\Http\Controllers\UploadEspacioController@showEditarUploadEspacio1           | web,auth     |
|        | DELETE                                 | upload-espacio/infogeneral/eliminarfoto/{id}                    | deletepic.upload.espacio        | App\Http\Controllers\UploadEspacioController@deletePicEspacio                   | web,auth     |
|        | GET|HEAD                               | upload-espacio/infogeneral/{espacio?}                           | upload.espacio.1                | App\Http\Controllers\UploadEspacioController@showUploadEspacio1                 | web,auth     |
|        | GET|HEAD                               | upload-espacio/precios/{espacio}                                | upload.espacio.4                | App\Http\Controllers\UploadEspacioController@showUploadEspacio4                 | web,auth     |
|        | PUT                                    | upload-espacio/precios/{id}                                     | insert.upload.espacio.4         | App\Http\Controllers\UploadEspacioController@insertAndShowUploadEspacio4        | web,auth     |
|        | GET|HEAD                               | upload-espacio/resumen/{espacio}                                | upload.espacio.resumen          | App\Http\Controllers\UploadEspacioController@showUploadEspacioResumen           | web,auth     |
|        | PUT                                    | upload-espacio/resumen/{id}                                     | insert.upload.espacio.resumen   | App\Http\Controllers\UploadEspacioController@insertAndShowUploadEspacioResumen  | web,auth     |
+--------+----------------------------------------+-----------------------------------------------------------------+---------------------------------+---------------------------------------------------------------------------------+--------------+

【问题讨论】:

  • 请显示php artisan route:list的结果或完整的路由文件。
  • 您可能应该在$routeMiddleware 中注册中间件并为其命名,并且可能使用除登录之外的组中间件。目前中间件检查其是否登录并再次重定向到coming.soon路由,这就是重定向太多的原因

标签: php laravel laravel-middleware


【解决方案1】:

原因是当你重定向时,用户再次来到服务器并点击相同的中间件。您应该检查路线名称以排除它。您必须自己编写排除逻辑。

namespace App\Http\Middleware;

use Closure;
use Auth;

class ComingSoon
{
    protected $exceptRoutes = [
        'coming.soon'
    ];

    public function handle($request, Closure $next)
    {
      $route = $request->route()->getName();

      if(!in_array($route, $this->exceptRoutes)) {
          if (!Auth::check() or Auth::user()->email !== 'joaquin@test.com') {
            return redirect()->route('coming.soon');
          }
      }
      return $next($request);
    }
}

【讨论】:

  • 条件表示只有joaquin登录的用户才能登录。
  • 当我这样做时,我收到“调用 null 时的成员函数 getName()”错误。我检查了 $request->route() 并返回 null
  • 哪个 laravel 版本? Null 请求任何页面?
  • Laravel 5.5。是的,任何页面。我尝试了不同的获取路线的方法,它们都返回 null。很奇怪,对吧?
  • 你试过什么? Route::currentRouteName()Request::route()->getName()?抱歉,我帮不上忙,看来它必须有效。 hdtuto.com/article/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多