laravel - Laravel:如何处理在不同包的应用程序提供程序中设置的 ResetPassword::createUrlUsing?
问题描述
在我的Laravel API 中,我有两个包my-packages/foo
和my-packages/bar
. 每一个都与一个 SPA 前端(foo.com
和bar.com
)相关,并有自己的身份验证保护(api:foo
和api:bar
)和用户提供者(users:foo
和users:bar
)。
用户通过Laravel Passport Password Grant Token从 SPA 登录。
要为每个 SPA 设置密码恢复,我已将其添加到以下boot()
方法中FooServiceProvider.php
:
ResetPassword::createUrlUsing(function ($notifiable, $token) {
return config('foo.reset_password_url') . $token;
});
再次在BarServiceProvider.php
:
ResetPassword::createUrlUsing(function ($notifiable, $token) {
return config('bar.reset_password_url') . $token;
});
现在,当我调用两条路由(foo/forgot-password
或bar/forgot-password
)中的任何一条时,发送重置链接方法总是发送以下恢复地址foo
:
Route::post('foo/forgot-password', function (Request $request) {
$request->validate(['email' => 'required|email']);
Password::sendResetLink(
$request->only('email')
);
);
我应该如何解决这个问题?
解决方案
我通过移动ResetPassword::createUrlUsing
到 main找到了解决方法AppServiceProvider
:
public function boot()
{
ResetPassword::createUrlUsing(function ($notifiable, $token) {
$link = match (request()->path()) {
'foo/forgot-password' => config('foo.reset_password_url') . $token,
'bar/forgot-password' => config('bar.reset_password_url') . $token,
default => null
};
return $link;
});
}
虽然它不是很优雅,但我希望每个包都管理自己的密码重置过程。
编辑
这甚至可以这样简化:
public function boot()
{
ResetPassword::createUrlUsing(function ($notifiable, $token) {
return config(request()->segment(1) . '.reset_password_url') . $token;
});
}
推荐阅读
- r - geom_dumbbell 图不继承 aes
- ionic-framework - Sending String command to BLE in Ionic
- amazon-web-services - 在 Terraform 中有条件地添加 MQ 代理用户
- ruby - Ruby class variable used like class instance variable
- c++ - C++,检测鼠标是否空闲(短时间,20ms)
- javascript - Adjust top of div after load
- c# - 将方法作为参数传递并让它订阅函数内的事件?
- python - Python:从两个列表中制作一个 csv
- java - 不存在类型变量 T 的实例,因此 ID 符合 Comparable
- string - 使用扩展函数将字符串中的每个单词大写