Laravel 5.3 密码代理定制
Laravel 5.3 Password Broker Customization
有谁知道如何覆盖 laravel 的密码代理中使用的功能?我知道文档:
https://laravel.com/docs/5.3/passwords#resetting-views
提供有关如何处理视图和一些表面级别的内容的信息,但实际上根本不清楚,或者我可能没有阅读足够的次数。
我已经知道如何覆盖 ResetsPasswords.php
特性,但是覆盖 Password::broker()
的功能是针对下一层的。
如果需要更多信息,我可以提供一些。
提前致谢。
我不得不面对同样的问题,需要覆盖一些 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 修改为 return 我的 CustomPasswordProvider class.
的一个实例
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 class 它扩展了默认值 PasswordBroker 位于:
Illuminate\Auth\Passwords\PasswordBroker 并覆盖了我需要的功能。
use Illuminate\Auth\Passwords\PasswordBroker as BasePasswordBroker;
class CustomPasswordBroker extends BasePasswordBroker
{
// override the functions that you need here
}
不确定这是否是最佳实施方式,但它对我有用。
答案中第 1 步和第 3 步缺少一些内容
步骤 1
可能最安全的方法是简单地将 class 从 Illuminate\Auth\Passwords\PassswordResetServiceProvider.php
复制到 App\Provider\CustomPasswordResetServiceProvider
并更改:
- 命名空间为
namespace App\Providers;
- Class 命名为
CustomPasswordResetServiceProvider
- 将
use App\Services\CustomPasswordBrokerManager;
添加到顶部
- 在函数
registerPasswordBroker
内将 PasswordBrokerManager
重命名为 CustomPasswordBrokerManager
步骤 2.
除了更改解析方法外,还要执行以下操作:
- 将命名空间更改为
namespace App\Services;
- 将
use Illuminate\Auth\Passwords\DatabaseTokenRepository;
添加到顶部
- 将 class 名称更改为
CustomPasswordBrokerManager
有谁知道如何覆盖 laravel 的密码代理中使用的功能?我知道文档:
https://laravel.com/docs/5.3/passwords#resetting-views
提供有关如何处理视图和一些表面级别的内容的信息,但实际上根本不清楚,或者我可能没有阅读足够的次数。
我已经知道如何覆盖 ResetsPasswords.php
特性,但是覆盖 Password::broker()
的功能是针对下一层的。
如果需要更多信息,我可以提供一些。
提前致谢。
我不得不面对同样的问题,需要覆盖一些 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 修改为 return 我的 CustomPasswordProvider class.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 class 它扩展了默认值 PasswordBroker 位于:
Illuminate\Auth\Passwords\PasswordBroker 并覆盖了我需要的功能。use Illuminate\Auth\Passwords\PasswordBroker as BasePasswordBroker; class CustomPasswordBroker extends BasePasswordBroker { // override the functions that you need here }
不确定这是否是最佳实施方式,但它对我有用。
答案中第 1 步和第 3 步缺少一些内容
步骤 1
可能最安全的方法是简单地将 class 从 Illuminate\Auth\Passwords\PassswordResetServiceProvider.php
复制到 App\Provider\CustomPasswordResetServiceProvider
并更改:
- 命名空间为
namespace App\Providers;
- Class 命名为
CustomPasswordResetServiceProvider
- 将
use App\Services\CustomPasswordBrokerManager;
添加到顶部 - 在函数
registerPasswordBroker
内将PasswordBrokerManager
重命名为CustomPasswordBrokerManager
步骤 2.
除了更改解析方法外,还要执行以下操作:
- 将命名空间更改为
namespace App\Services;
- 将
use Illuminate\Auth\Passwords\DatabaseTokenRepository;
添加到顶部 - 将 class 名称更改为
CustomPasswordBrokerManager