Laravel 5.4:密码重置令牌自定义长度?
我正在使用laravel 5.4构建一个API,在用户验证后,如果用户通过密码重置向用户发送令牌,并在重置密码之前提供了该令牌,则该令牌将通过该令牌发送给用户 目前发送的令牌有64个字符,对于用户来说太大了,我不确定laravel是否有配置给令牌定制长度?
该解决方案有点棘手,尽可能清楚地解释该过程:
第1步 - 扩展标准DatabaseTokenRepository
  创建一个扩展IlluminateAuthPasswordsDatabaseTokenRepository的类来定义一个新的令牌创建策略。 
<?php
namespace AppAuthPasswords;
use IlluminateAuthPasswordsDatabaseTokenRepository;
class CustomDatabaseTokenRepository extends DatabaseTokenRepository
{
    // Overrides the standard token creation function
    public function createNewToken()
    {
        retrun substr(parent::createNewToken(), 0, 30);
    }
}
我刚刚将由Laravel生成的令牌修剪为30个字符,随意实现您自己的令牌生成例程。
第2步 - 扩展标准PasswordBrokerManager
  现在您必须告诉PasswordBrokerManager使用您的令牌存储库而不是标准存储库。  为了做到这一点,您必须扩展IlluminateAuthPasswordsPasswordBrokerManager 。 
<?php
namespace AppAuthPasswords;
use IlluminateAuthPasswordsPasswordBrokerManager;
class CustomPasswordBrokerManager extends PasswordBrokerManager
{
    // Override the createTokenRepository function to return your
    // custom token repository instead of the standard one
    protected function createTokenRepository(array $config)
    {
        $key = $this->app['config']['app.key'];
        if (Str::startsWith($key, 'base64:')) {
            $key = base64_decode(substr($key, 7));
        }
        $connection = isset($config['connection']) ? $config['connection'] : null;
        return new CustomDatabaseTokenRepository(
            $this->app['db']->connection($connection),
            $this->app['hash'],
            $config['table'],
            $key,
            $config['expire']
        );
    }
}
  第3步 - 扩展标准PasswordResetServiceProvider 
  现在您必须扩展标准IlluminateAuthPasswordsPasswordResetServiceProvider以便告诉Laravel实例化您的CustomPasswordBrokerManager 。 
<?php
namespace AppAuthPasswords;
use IlluminateAuthPasswordsPasswordResetServiceProvider;
class CustomPasswordResetServiceProvider extends PasswordServiceProvider
{
    // Override the method registerPasswordBroker
    // in order to specify your customized manager
    protected function registerPasswordBroker()
    {
        $this->app->singleton('auth.password', function ($app) {
            return new CustomPasswordBrokerManager($app);
        });
        $this->app->bind('auth.password.broker', function ($app) {
            return $app->make('auth.password')->broker();
        });
    }
}
  第4步 - 最后一步,在config/app.php替换提供者 
  在providers密钥下的config/app.php文件中注释掉以下行: 
 // IlluminateAuthPasswordPasswordResetServiceProvider::class, 
并在下面添加以下行:
 AppAuthPasswordsCustomPasswordResetServiceProvider::class, 
注意事项
  做这样的事情时要小心,标记被定义为hash_hmac('sha256', Str::random(40), $this->hashKey) ,其中$this->hasKey是env('APP_KEY )。  这用于确保在生成密码重设令牌时不会发生冲突。  我建议你调查一个安全的方法来安全地减少你的令牌长度。 
