为什么 Laravel 会跳过我在中间件中的 if 语句?
Why does Laravel skip my if-statement in Middleware?
我创建了一个中间件来检查 google2fa_enabled = 1 的用户是否有 google2fa_secret,如果没有,他们需要创建一个。
在中间件中,我用 if 语句定义了 handle 函数,当为真时,它将用户重定向到 /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 == ""
)
糟糕,我已经发现错误了。
我需要 if-statement 中的 return 语句才能工作,所以 redirect()
必须是 return redirect()
我创建了一个中间件来检查 google2fa_enabled = 1 的用户是否有 google2fa_secret,如果没有,他们需要创建一个。
在中间件中,我用 if 语句定义了 handle 函数,当为真时,它将用户重定向到 /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 == ""
)
糟糕,我已经发现错误了。
我需要 if-statement 中的 return 语句才能工作,所以 redirect()
必须是 return redirect()