新しい 6.1 サイトを最初からセットアップし、セキュリティを実装しようとしています。 Symfony 3.4 の以前のサイトのユーザー データベースを使用しようとしていますが、これには既存のパスワード ハッシュとソルトが含まれています。同じハッシュを引き続き使用したいので、sha1 アルゴリズムを使用します (これについては後で検討します)。 ハッシュをアップグレードします。アルゴリズム)。ログインしようとすると、常に次のメッセージが返されます:
リーリーこれは単純なことのようですが、パスワードが認識されません。ただし、パスワードは Symfony 3.4 バージョン サイトで使用されているデータベース内のパスワードと同じであり、まったく同じパスワード ハッシュを使用します。
これは基本的にすぐに使えるサイトです。セキュリティを機能させる以外に何も設定を行っていません。ドキュメントに正確に従いました。
これは私の security.yaml:
リーリーこれは SecurityController.php (ルーティング/ログインを含む):
リーリーこれは私のlogin.html.twigです:
リーリーこれは私のユーザー クラスです:
リーリーこの問題の解決方法を知っている人はいますか?
解決しました!まず、User クラスが
PasswordAuthenticatedUserInterface
ではなくLegacyPasswordAuthenticatedUserInterface
を継承するようにします。2 番目のことは、
$this->hashLength/vendor/symfony/password-hasher/Hasher/MessageDigestPasswordHasher.php
を確認し、verify
関数で最初のブロック行 ## をコメントアウトすることです。 #if (\strlen($hashedPassword) !== $this->hashLength || str_contains($hashedPassword, '$')) {.
は常に -1 であるため、このブロックは永続的に false を返します。
$this->hashLength
はコンストラクターで設定されています。なぜ常に -1 を返すのか、そのチェックが有効なのかはわかりませんが、コメントアウトすることでログインできるようになりました :)