我正在尝试使用默认机制配置记住我的symfony功能,如here所述;但无法使其发挥作用。
创建名为REMEMBERME的Cookie,但设置为已删除,其过期日期为1970.这就是为什么我想记住我的功能不起作用。但是,当我在security.yml中使用(always_remember_me:true)时,代码运行良好,但它不符合我的目的。使用(always_remember_me:true)即使用户未在UI中检查REMEMBER ME复选框,也会创建cookie。
非常感谢任何帮助
我使用的是2.3.7版本
这是我完整的security.yml文件:
security:
firewalls:
main:
pattern: ^/
anonymous: ~
remember_me:
key: "%secret%"
lifetime: 31536000 # a year
domain: ~
path: /
remember_me_parameter: _remember_me
#always_remember_me: true
form_login:
login_path: _my_login
check_path: _my_login_check
always_use_default_target_path: true
default_target_path: /out/homepage
remember_me: true
logout:
path: _my_logout
target: _my_login
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: IS_AUTHENTICATED_REMEMBERED }
providers:
chain_provider:
chain:
providers: [in_memory, user_db]
in_memory:
memory:
users:
user: { password: user, roles: 'ROLE_USER' }
admin: { password: admin, roles: ['ROLE_ADMIN', 'ROLE_USER'] }
user_db:
entity: {class: ProjectName\StoreBundle\Entity\User, property: username}
encoders:
ProjectName\StoreBundle\Entity\User:
algorithm: sha1
iterations: 1
encode_as_base64: false
Symfony\Component\Security\Core\User\User: plaintext
LoginController.php
class LoginController extends Controller
{
/**
* @Route("/login", name="_my_login")
* @Template()
*/
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);
$session->remove(SecurityContext::AUTHENTICATION_ERROR);
}
return array(
// last username entered by the user
'last_username' => $session->get(SecurityContext::LAST_USERNAME),
'error' => $error,
);
}
/**
* @Route("/login_check", name="_my_login_check")
*/
public function loginCheckAction()
{
}
答案 0 :(得分:1)
我在input标记中添加了value属性。删除后,它现在工作。 :)
<input type="checkbox" id="remember_me" name="_remember_me" checked /> Remember me
答案 1 :(得分:0)
我认为复选框名称不正确。它应该将'name'属性设置为'_remember_me'以使魔法发生。你可以发布表单模板的内容吗?