Laravel 5.3 密码代理自定义
Posted
技术标签:
【中文标题】Laravel 5.3 密码代理自定义【英文标题】:Laravel 5.3 Password Broker Customization 【发布时间】:2017-03-24 18:11:57 【问题描述】:有谁知道如何覆盖 laravel 的密码代理中使用的功能?我知道文档:
https://laravel.com/docs/5.3/passwords#resetting-views
提供有关如何处理诸如视图和一些表面级别的事情的信息,但实际上根本不清楚,或者我可能没有阅读足够多的时间。
我已经知道如何覆盖 ResetsPasswords.php
特征,但覆盖 Password::broker()
的功能是为了下一层。
如果需要更多信息,我可以提供一些。
提前谢谢你。
【问题讨论】:
【参考方案1】:我不得不面对同样的问题,需要重写一些 PasswordBroker 函数。经过对网络的大量调查和许多失败的尝试,我最终实现了以下实现:
在 App\Providers 中创建了一个 CustomPasswordResetServiceProvider,我在其中注册了一个 CustomPasswordBrokerManager 实例。
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\CustomPasswordBrokerManager;
class CustomPasswordResetServiceProvider extends ServiceProvider
protected $defer = true;
public function register()
$this->registerPasswordBrokerManager();
protected function registerPasswordBrokerManager()
$this->app->singleton('auth.password', function ($app)
return new CustomPasswordBrokerManager($app);
);
public function provides()
return ['auth.password'];
在 config/app.php 中注释掉了一行://Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
并添加:App\Providers\CustomPasswordResetServiceProvider::class,
在 App\Services 文件夹中创建了一个 CustomPasswordBrokerManager 并复制了位于以下位置的默认 PasswordBrokerManager 的上下文: Illuminate\Auth\Passwords\PasswordBrokerManager.php 然后修改函数 resolve 以返回我的 CustomPasswordProvider 类的实例。
protected function resolve($name)
$config = $this->getConfig($name);
if (is_null($config))
throw new InvalidArgumentException("Password resetter [$name] is not defined.");
return new CustomPasswordBroker(
$this->createTokenRepository($config),
$this->app['auth']->createUserProvider($config['provider'])
);
最后,在 App\Services 文件夹中,我创建了一个 CustomPasswordBroker 类,该类扩展了位于以下位置的默认 PasswordBroker: Illuminate\Auth\Passwords\PasswordBroker 并覆盖了我需要的函数。
use Illuminate\Auth\Passwords\PasswordBroker as BasePasswordBroker;
class CustomPasswordBroker extends BasePasswordBroker
// override the functions that you need here
不确定这是否是最好的实现,但它对我有用。
【讨论】:
这是我最终做的一个非常相似的实现。很好地解释了对目录和所有内容的识别。 +1 并标记为正确! 只需更改密码重置所需的密码长度。 6 个字符的最小长度在 laravel 代码中埋得很深,所以我只能在这里用你的答案来改变它。非常感谢! 谢谢你。我被这个 Password Broker 和 Password Broker Manager 搞得一团糟。说真的,我无法理解他们如何以如此糟糕的方式复杂化过去很简单的事情。此外,对于在 Laravel 5.4 上执行此操作的人,服务提供者的register
方法与此处显示的方法略有不同。本质上,registerPasswordBroker
方法应该在 Illuminate\Auth\Passwords\PasswordResetServiceProvider
上按原样复制,除了您使用自己的自定义 CustomPasswordBrokerManager
实例的部分。
非常感谢,对我帮助很大!【参考方案2】:
答案https://***.com/a/42855948/2311074中的步骤1和3缺少一些东西
第 1 步
可能最安全的方法是将类从Illuminate\Auth\Passwords\PassswordResetServiceProvider.php
复制到App\Provider\CustomPasswordResetServiceProvider
并更改:
-
命名空间到
namespace App\Providers;
类名改为CustomPasswordResetServiceProvider
在顶部添加use App\Services\CustomPasswordBrokerManager;
函数内部registerPasswordBroker
将PasswordBrokerManager
重命名为CustomPasswordBrokerManager
第 2 步。
除了更改解析方法之外,还可以执行以下操作:
-
将命名空间更改为
namespace App\Services;
在顶部添加use Illuminate\Auth\Passwords\DatabaseTokenRepository;
类名改为CustomPasswordBrokerManager
【讨论】:
以上是关于Laravel 5.3 密码代理自定义的主要内容,如果未能解决你的问题,请参考以下文章