在这里找到:https ://talltips.novate.co.uk/laravel/laravel-8-conditional-login-redirects
- 在 app\Http 下创建一个名为 Responses 的文件夹
- 创建一个文件 LoginResponse.php
<?php
namespace App\Http\Responses;
use Illuminate\Support\Facades\Auth;
use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract;
class LoginResponse implements LoginResponseContract
{
public function toResponse($request)
{
// below is the existing response
// replace this with your own code
// the user can be located with Auth facade
return $request->wantsJson()
? response()->json(['two_factor' => false])
: redirect()->intended(config('fortify.home'));
}
}
- 让 Laravel 使用我们新的响应类
这个新类现在取代了之前由 Fortify 注册的 Singleton。
编辑 app\Providers 文件夹中的 JetstreamServiceProvider;
在 boot 方法中,添加对新响应类的引用。当登录完成(并且用户实际上已通过身份验证)时,您的新响应将被调用。
public function boot()
{
$this->configurePermissions();
Jetstream::deleteUsersUsing(DeleteUser::class);
// register new LoginResponse
$this->app->singleton(
\Laravel\Fortify\Contracts\LoginResponse::class,
\App\Http\Responses\LoginResponse::class
);
}
两因素身份验证
如果您将 2FA 与 Jetstream 一起使用,您还需要捕获 TwoFactorLoginResponse。使用相同的方法;
// register new TwofactorLoginResponse
$this->app->singleton(
\Laravel\Fortify\Contracts\TwoFactorLoginResponse::class,
\App\Http\Responses\LoginResponse::class
);
如果您希望使用 2FA 登录的用户有不同的行为,您可以返回相同的响应,或者创建额外的响应。