一部のワードプレスのブログを Symfony に移動して、Symfony2 を学習しています。ログイン手順に行き詰まっています。Wordpress は非標準のパスワード ハッシュを使用し$P$....
ており、ログイン時に古いパスワード ハッシュに対してユーザーをチェックし、パスワードが正しい場合は bcrypt に再ハッシュします。これまでのところ、symfony セキュリティ メカニズムで使用するカスタム エンコーダー クラスを作成しました。
<?php
namespace Pkr\BlogUserBundle\Service\Encoder;
use PHPassLib\Application\Context;
use Symfony\Component\Security\Core\Encoder\BCryptPasswordEncoder;
use Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface;
use Symfony\Component\Security\Core\Util\SecureRandom;
class WpTransitionalEncoder implements PasswordEncoderInterface
{
public function __construct($cost = 13)
{
$secure = new SecureRandom();
$this->_bcryptEncoder = new BCryptPasswordEncoder($secure, $cost);
}
public function isPasswordValid($encoded, $raw, $salt)
{
if (preg_match('^\$P\$', $encoded)) {
$context = new Context();
$context->addConfig('portable');
return $context->verify($raw, $encoded);
}
return $this->_bcryptEncoder->isPasswordValid($encoded, $raw, $salt);
}
public function encodePassword($raw, $salt)
{
return $this->_bcryptEncoder->encodePassword($raw, $salt);
}
}
私はそれをサービスとして使用しています:
#/src/Pkr/BlogUserBundle/Resources/config/services.yml
services:
pkr_blog_user.wp_transitional_encoder:
class: Pkr\BlogUserBundle\Service\Encoder\WpTransitionalEncoder
そして security.yml では:
#/app/config/security.yml
security:
encoders:
Pkr\BlogUserBoundle\Entity\User:
id: pkr_blog_user.wp_transitional_encoder
cost: 15
私の質問は次のとおりです。
内のエンコーダ サービス フォームにパラメータを渡すにはどうすればよいsecurity.yml
ですか?
cost: 15
動かないので質問します。
パスワード ハッシュ更新ロジックはどこに配置すればよいですか? パスワード検証の直後に、次のようになると考えていました。
public function isPasswordValid($encoded, $raw, $salt)
{
if (preg_match('^\$P\$', $encoded)) {
$context = new Context();
$context->addConfig('portable');
$isValid = $context->verify($raw, $encoded);
if ($isValid) {
// put logic here...
}
return $isValid;
}
return $this->_bcryptEncoder->isPasswordValid($encoded, $raw, $salt);
}
しかし、それはどういうわけか間違った場所のようです。では、正しい方法は何ですか?