我正在尝试在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
我希望有人可以帮助,看看我做错了什么。提前谢谢。
答案 0 :(得分:0)
首先,如果您可以我强烈建议您使用FOSUserBundle。虽然它是一个束缚你的束,但如果你需要一些简单的东西,它确实有效。 回到主题。 这里有一条重定向到http://whateveryoururlis.dev/login_check的路线(trekkerslep_dashboard_login_check)。由于您不使用任何东西来自行管理登录,我认为您需要在其中添加控制器和功能,以便您的login_check指向适合您需求的内容。例如,您可以重定向到显示"您设法连接"的页面。顺便说一句,如果你正在使用app_dev.php,你应该看看你是否已经登录。
有时symfony缓存确实试图让你屈服于提交。如果您的代码应该可以工作但是没有,您可以尝试清除它,有时它会显示Symfony忘记告诉您的错误。
祝你好运!