Symfony / login_check给出空白页面

时间:2016-01-29 15:15:07

标签: php symfony security login

我正在尝试在Symfony中构建一些登录功能。我是Symfony的初学者,我无法找到解决问题的方法。

我正在使用mySQL数据库中的用户。当我使用错误的凭据登录时,它会在登录页面上输出错误,表明我使用了错误的凭据。这很棒,因为这就是我想要的。但是当我使用正确的凭据登录时,它会转到/ login_check的空白页面。这是我尝试遵循的教程:http://symfony.com/doc/current/cookbook/security/entity_provider.html

我的Symfony版本是2.8。

这是我的security.yml

encoders:
    Trekkerslep\DashboardBundle\Entity\User:
        algorithm: bcrypt

providers:
    database_provider:
        entity:
            class: TrekkerslepDashboardBundle:User

firewalls:
    # disables authentication for assets and the profiler, adapt it according to your needs
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    default:
        anonymous: ~
        pattern: ^/
        form_login:
            provider: database_provider
            login_path: /login
            check_path: /login_check
            csrf_token_generator: security.csrf.token_manager
            default_target_path: trekkerslep_dashboard_main
            always_use_default_target_path: true

access_control:
     - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
     - { path: ^/api, roles: IS_AUTHENTICATED_ANONYMOUSLY }
     - { path: ^/, roles: [ROLE_USER] }

我的用户实体如下所示:

class User implements UserInterface, \Serializable {

    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=50, unique=true)
     */
    protected $username;

    /**
     * @ORM\Column(type="string", length=64)
     */
    protected $password;

    /**
     * @ORM\Column(type="string", length=100, unique=true)
     */
    protected $email;

    /**
     * @ORM\Column(type="string")
     */
    protected $screenname;

    /**
     * @ORM\Column(type="datetime")
     */
    protected $created;

    /**
     * @ORM\Column(name="is_active", type="boolean")
     */
    protected $isActive;

    public function __construct() {
        $this->isActive = true;
    }

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

    public function getSalt() {
        return null;
    }

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

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

    public function eraseCredentials() {

    }

    /** @see \Serializable::serialize() */
    public function serialize() {
        return serialize(array(
            $this->id,
            $this->username,
            $this->password,
            // see section on salt below
            // $this->salt,
        ));
    }

    /** @see \Serializable::unserialize() */
    public function unserialize($serialized) {
        list (
            $this->id,
            $this->username,
            $this->password,
            // see section on salt below
            // $this->salt
            ) = unserialize($serialized);
    }

我的routing.yml:

trekkerslep_dashboard_main:
    path:     /
    defaults: { _controller: TrekkerslepDashboardBundle:Dashboard:index }

trekkerslep_dashboard_login:
    path:     /login
    defaults: { _controller: TrekkerslepDashboardBundle:Security:login }

trekkerslep_dashboard_login_check:
    path:     /login_check

我希望有人可以帮助,看看我做错了什么。提前谢谢。

1 个答案:

答案 0 :(得分:0)

首先,如果您可以我强烈建议您使用FOSUserBundle。虽然它是一个束缚你的束,但如果你需要一些简单的东西,它确实有效。 回到主题。 这里有一条重定向到http://whateveryoururlis.dev/login_check的路线(trekkerslep_dashboard_login_check)。由于您不使用任何东西来自行管理登录,我认为您需要在其中添加控制器和功能,以便您的login_check指向适合您需求的内容。例如,您可以重定向到显示"您设法连接"的页面。顺便说一句,如果你正在使用app_dev.php,你应该看看你是否已经登录。

有时symfony缓存确实试图让你屈服于提交。如果您的代码应该可以工作但是没有,您可以尝试清除它,有时它会显示Symfony忘记告诉您的错误。

祝你好运!