自定义实体登录错误Symfony2.7

时间:2015-08-02 11:13:55

标签: php entity-framework symfony symfony-2.7

我正在使用Symfony 2.7,但我在登录用户时遇到问题。我使用自定义实体,我已经创建了一个自定义实体“运算符”与适当的变量和方法。我在安全文件中使用两种登录方法。一个是in_memory,我用它来管理员登录,它正常工作,另一个是user_db。我使用bcrypt算法来加密密码。当我尝试登录用户时,它会显示“无效凭据”消息。我究竟做错了什么?谢谢!

security.yml

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
        Application\AdminBundle\Entity\Operator:
            algorithm: bcrypt

providers:
        chain_provider:
            chain:
                providers: [ in_memory, user_db ]

user_db:
            entity:
                class: ApplicationAdminBundle:Operator
                property: username

SecurityController.php

<?php

namespace Application\AdminBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class SecurityController extends Controller
{
/**
* @Route("/login", name="login")
*/
public function loginAction(Request $request)
{
    $authenticationUtils = $this->get('security.authentication_utils');

    $error = $authenticationUtils->getLastAuthenticationError();

    return $this->render('ApplicationAdminBundle:security:login.html.twig',
        array(
            'error'         => $error,
        )
    );
}

/**
* @Route("/login_check", name="login_check")
*/
public function loginCheckAction()
{
}

}

“Operator”实体和setPassword(),getPassword()方法

public function setPassword($password)
    {
        $this->password = password_hash ($password, PASSWORD_BCRYPT);

        return $this;
    }

    /**
     * Get password
     *
     * @return string 
     */
    public function getPassword()
    {
        return $this->password;
    }

2 个答案:

答案 0 :(得分:1)

可能你不应该使用password_hash你必须使用知道如何处理密码加密的symfony编码器。 尝试在代码中实现类似的东西(通常在寄存器控制器中):http://symfony.com/doc/current/book/security.html#dynamically-encoding-a-password

访问此页面http://symfony.com/doc/current/book/security.html以全面了解symfony2安全性的工作原理。

答案 1 :(得分:0)

解决方案:

我所做的一切都是数据库表,因为我已将密码字段设置为varchar(25),并且无法完全插入哈希密码。我将其更改为varchar(255),现在一切正常。现在每个用户都可以登录。