Laravel Fortify注册后如何带消息重定向?要求返回$user报错怎么解决
解决方案
报错原因
你是把重定向逻辑写在了实现Laravel\Fortify\Contracts\CreatesNewUsers契约的类里,这个类的create方法按照契约要求必须返回创建完成的用户实例,不允许返回响应类,用户创建和后续跳转逻辑在Fortify的设计中是完全解耦的。
下面是两种可行的实现方案,不需要修改你原有创建用户、收款的逻辑:
方案1:自定义注册成功响应(推荐)
直接重写Fortify默认的注册响应,在跳转前追加闪存消息:
- 打开
app/Providers/FortifyServiceProvider.php,在boot方法中添加如下绑定代码:
use Laravel\Fortify\Contracts\RegisterResponse as RegisterResponseContract; use Laravel\Fortify\Http\Responses\RegisterResponse; public function boot() { // 原有Fortify配置保留,新增以下代码 $this->app->singleton(RegisterResponseContract::class, function () { return new class extends RegisterResponse { public function toResponse($request) { return parent::toResponse($request)->with('success', 'You are logged in!'); } }; }); }
该方案侵入性最低,完全遵循Fortify的扩展规范,原有创建用户的方法还是正常返回$user即可。
方案2:监听注册完成事件
如果需要同时处理注册后的其他逻辑(比如发送欢迎通知等),可以用事件监听的方式实现:
- 打开
app/Providers/EventServiceProvider.php,在$listen属性中注册事件关联:
protected $listen = [ 'Illuminate\Auth\Events\Registered' => [ 'App\Listeners\HandlePostRegistrationLogic', ], ];
- 执行命令生成监听类:
php artisan make:listener HandlePostRegistrationLogic - 在监听类的
handle方法中写入闪存逻辑:
public function handle(\Illuminate\Auth\Events\Registered $event) { session()->flash('success', 'You are logged in!'); }
两种方案实现后,你可以直接在首页模板中通过session('success')读取并展示成功提示。
内容的提问来源于stack exchange,提问作者Saad Ramay
相关产品推荐
相关产品推荐

