我是一名有用的助手,可以为您进行文本翻译。下面是需要翻译的内容:
在 AuthController 类中,我正在使用来自 Symfony2 文档的示例代码:
现在出现了问题:从http://symfony2.localhost/app_dev.php/admin/test到http://symfony2.localhost/app_dev.php/login的重定向规则是有效的,但是在输入用户名/密码并提交登录表单后,我被重新定向到登录网址,而没有错误消息。
我知道这可能是一个非常基本的问题,但由于symfony2上还没有太多的文档,所以我认为这是一个很好的地方来问这样的问题。一般来说,在symfony2项目中有一些看起来像魔法一样工作的点(当然是依赖注入的),这使得学习过程有点困难。我的想法是认为身份验证的工作方式是有一个神奇的控制器捕获validateLogin操作,查找我的User实体的实体存储库,调用findOneBy('username' => $username)并比较密码...这是正确的吗?
提前感谢任何提示,我已经在谷歌上搜索这个问题几个小时了... :)
保罗
我正在第一次使用Symfony2开发一个小型Doctrine2支持的项目。目前,我在处理Symfony2的安全组件方面遇到了困难,确切地说是在documentation中描述的身份验证机制方面。
我想使用基于表单的身份验证,并已按照文档中所述完成了所有操作:
我有一个security.yml配置文件,看起来像这样:
security.config:
firewalls:
admin:
pattern: /admin/.*
form-login: true
logout: true
login_path: /login
check_path: /validateLogin
always_use_default_target_path: false
target_path_parameter: target
check_page:
pattern: /validateLogin
form-login: true
login_path: /login
check_path: /validateLogin
always_use_default_target_path: false
target_path_parameter: target
public:
pattern: /.*
security: false
providers:
admin:
password_encoder: md5
entity:
class: AdminBundle:User
property: username
access_control:
- { path: /admin/.*, role: ROLE_ADMIN }
- { path: /validateLogin, role: IS_AUTHENTICATED_ANONYMOUSLY }
role_hierarchy:
ROLE_ADMIN: ROLE_USER
在阅读devcomments上的类似帖子后,check_page已从“不安全”区域中排除。
在我的路由配置中,我包括两条用于身份验证的规则:
_security_login:
pattern: /login
defaults:
_controller: PublicBundle:Auth:index
_security_check:
pattern: /validateLogin
我使用的表示用户的实体类是Doctrine2实体,并实现了AccountInterface接口:
<?php
namespace Application\AdminBundle\Entity;
use Symfony\Component\Security\User\AccountInterface;
/**
* @orm:Entity
*/
class User implements AccountInterface
{
/**
* @orm:Id
* @orm:Column(type="integer")
* @orm:GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @orm:Column(type="string", length="255")
*/
protected $username;
/**
* @orm:Column(type="string", length="40")
*/
protected $password;
public function getId()
{
return $this->id;
}
public function setId($id)
{
$this->id = $id;
}
public function getUsername()
{
return $this->username;
}
public function setUsername($username)
{
$this->username = $username;
}
public function getPassword()
{
return $this->password;
}
public function setPassword($password)
{
$this->password = $password;
}
/**
* Implementing the AccountInterface interface
*/
public function __toString()
{
return $this->getUsername();
}
public function getRoles()
{
return array('ROLE_ADMIN');
}
public function eraseCredentials()
{
}
public function getSalt()
{
return $this->getId();
}
}
在 AuthController 类中,我正在使用来自 Symfony2 文档的示例代码:
public function indexAction()
{
if ($this->get('request')->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $this->get('request')->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = $this->get('request')->getSession()->get(SecurityContext::AUTHENTICATION_ERROR);
}
return
$this->render(
'PublicBundle:Auth:index.twig',
array(
'last_username' => $this->get('request')->getSession()->get(SecurityContext::LAST_USERNAME),
'error' => $error));
}
现在出现了问题:从http://symfony2.localhost/app_dev.php/admin/test到http://symfony2.localhost/app_dev.php/login的重定向规则是有效的,但是在输入用户名/密码并提交登录表单后,我被重新定向到登录网址,而没有错误消息。
我知道这可能是一个非常基本的问题,但由于symfony2上还没有太多的文档,所以我认为这是一个很好的地方来问这样的问题。一般来说,在symfony2项目中有一些看起来像魔法一样工作的点(当然是依赖注入的),这使得学习过程有点困难。我的想法是认为身份验证的工作方式是有一个神奇的控制器捕获validateLogin操作,查找我的User实体的实体存储库,调用findOneBy('username' => $username)并比较密码...这是正确的吗?
提前感谢任何提示,我已经在谷歌上搜索这个问题几个小时了... :)
保罗