【问题标题】:Why does Laravel skip my if-statement in Middleware?为什么 Laravel 在中间件中跳过我的 if 语句?
【发布时间】:2019-10-05 06:15:18
【问题描述】:

我创建了一个中间件来检查 google2fa_enabled = 1 的用户是否有 google2fa_secret,如果没有,他们需要创建一个。

在中间件中,我使用 if 语句定义了句柄函数,当它为真时,它将用户重定向到 /2fa/create。它没有用,所以我做了类似if(true) 的 if 语句,但用户没有被重定向。当我用return redirect('/2fa/create')替换之后的return语句时,它会重定向,所以使用中间件(也用Laravel调试栏确认)

中间件本身:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class checkTwoFactor
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(true){
            redirect('/2fa/create');
        }
        return $next($request);
    }
}

还有路线:

Route::get('/', function () {
    return view('layouts/master');
})->middleware(['auth', 'check2fa']);

我希望用户始终被重定向到 /2fa/create(稍后,如果用户登录,则有 google2fa_enabled = 1 &amp; google2fa_secret == ""

【问题讨论】:

    标签: laravel-5 laravel-middleware


    【解决方案1】:

    糟糕,我已经发现错误了。

    我需要该 if 语句中的 return 语句才能工作,所以 redirect() 必须是 return redirect()

    【讨论】:

      猜你喜欢
      • 2017-08-25
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多