1

こんにちは私はSymfony2とデータベーステーブルでログインしようとしています。パスワードはmd5で、ソルトフィールドはありません。ユーザーが多いので変更できません。

無効な電子メールでフォームを送信すると、ログインは正常に機能しているようです。「不正な資格情報」というメッセージが返されます。しかし、良いメールでフォームを送信すると、「提示されたパスワードは無効です」と表示されます。

どうしたの?

ファイアウォールを構成します。

security:
    encoders:
        Usuari\BackendBundle\Entity\Usuari:
            algorithm: md5

ソルトなしでUsuariエンティティにUserInterfaceを実装する

    public function getUsername()
    {
        return $this->email;
    }

    public function getSalt() { 
        return '';
    }

    public function getPassword()
    {
        return $this->clau;
    }

    public function getRoles()
    {
        return array('ROLE_ADMIN');
    }

    public function eraseCredentials() { }

    public function equals(UserInterface $user)
    {
        return $this->email === $user->getUsername();
    }

そして、セキュリティは/ loginルートで制御します:

namespace Mes\BackendBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;


    class SecurityController extends Controller
    {
        public function loginAction()
        {
            $request = $this->getRequest();
            $session = $request->getSession();

            // get the login error if there is one
            if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
                $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
            } else {
                $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
            }

            return $this->render('MeBackendBundle:Security:login.html.twig', array(
                // last username entered by the user
                'last_username' => $session->get(SecurityContext::LAST_USERNAME),
                'error'         => $error,
            ));
        }
    }
    ?>
4

3 に答える 3

3

に変更algorithm: sha1algorithm: md5ます。

于 2012-09-26T19:37:36.930 に答える
2

私も同じような状況でした。私がしたことは、レガシーユーザーが古いアルゴリズムを使用してログインでき、新しいユーザーがsymfonyのデフォルトのエンコーダーを使用してより安全なパスワードを取得できるように、個別のエンコーダーを作成したことです。

私はここに非常に広範な回答を投稿しました

于 2012-09-26T20:20:17.400 に答える
1

トーマス、この解決策はうまくいくようですが、もっと複雑です。

最後に、他のエンコード関数とソルトフィールドを使用してデータベースからすべてのパスワードを再生成することにしました。パスワードの変更を許可するリンクを記載したメールをすべてのユーザーに送信します

于 2012-10-02T23:08:54.123 に答える