Laravel为什么在中间件中跳过我的if语句?

时间:2019-05-17 22:52:39

标签: laravel-5 laravel-middleware

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

在中间件中,我已使用if语句定义了handle函数,当为true时,它将用户重定向到/ 2fa / create。它没有用,所以我做了类似if(true)的if语句,但是没有重定向用户。当我将return之后的语句替换为return redirect('/2fa/create')时,它会重定向,因此使用了中间件(也已通过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 & google2fa_secret == ""

1 个答案:

答案 0 :(得分:1)

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

在该if语句中,我需要一个return语句才能工作,因此redirect()必须为return redirect()