ソリューションは少しトリッキー、病気の試みは、できるだけ明確に手順を説明することです新しいトークン作成ポリシー
<?php
namespace App\Auth\Passwords;
use Illuminate\Auth\Passwords\DatabaseTokenRepository;
class CustomDatabaseTokenRepository extends DatabaseTokenRepository
{
// Overrides the standard token creation function
public function createNewToken()
{
retrun substr(parent::createNewToken(), 0, 30);
}
}
Laravelによって生成されたトークンを30文字まで切り捨てただけで、独自のトークン生成ルーチンを実装することができます。
STEP 2 - 今、あなたはあなたのトークンのリポジトリの代わりに、標準のいずれかを使用するPasswordBrokerManager
に指示する必要があり
標準PasswordBrokerManagerを拡張します。これを行うには、クラスIlluminate\Auth\Passwords\PasswordBrokerManager
を拡張する必要があります。
<?php
namespace App\Auth\Passwords;
use Illuminate\Auth\Passwords\PasswordBrokerManager;
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']
);
}
}
STEP 3 - 今、あなたはあなたのCustomPasswordBrokerManager
をインスタンス化するためにLaravelを伝えるために標準Illuminate\Auth\Passwords\PasswordResetServiceProvider
を拡張する必要が標準PasswordResetServiceProvider
を拡張します。
// Illuminate\Auth\Password\PasswordResetServiceProvider::class,
し、[追加: -
<?php
namespace App\Auth\Passwords;
use Illuminate\Auth\Passwords\PasswordResetServiceProvider;
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();
});
}
}
STEP 4最後のステップは、config/app.php
コメントアウトキーproviders
の下にconfig/app.php
ファイルに次の行をして、プロバイダを置き換えますすぐ下の行:
App\Auth\Passwords\CustomPasswordResetServiceProvider::class,
考察
は、そのようなことをやったときに、トークンが)$this->hasKey
がenv('APP_KEY
あるhash_hmac('sha256', Str::random(40), $this->hashKey)
として定義されるように注意してください。これは、パスワードリセットトークンを生成する際に衝突が発生しないようにするために使用されます。あなたのトークンの長さを安全に減らすための安全な方法を調べることをお勧めします。
はい私は、laravelも簡単な解決策を提供していないのと同じ理由だと思います。私はそれが安全ではないと分かり、別の解決策を続けました。ありがとう@ Desh901私は、あなたがソリューションに関するセキュリティ上の懸念を述べているので、私はあなたの質問の答えとしてあなたを受け入れるだろうと思います。 – blazR
喜んで助けます;) – Desh901