这可能是一个不好的方法问题,而不是技术问题,但无论如何,你的建议非常有价值。
我的网站有两个受保护的页面, / home 和 / popup ,每个页面都需要一个已登录的用户。您可能知道Symfony会自动将未登录用户重定向到您的login_path(在我的情况下只是 / login ),所以没关系。问题是,尝试从网址 / home 登录的用户需要查看模板调用 normal_login.html.php 以及尝试使用<登录的用户< strong> / popup 会看到 popup_login.html.php 。
我的 / login 页面由我的用户控制器管理,在那里我只是在寻找标题引用来查看用户是否来自 / popup :
$previousUrl = $this->getRequest()->headers->get('referer');
if(strpos($previousUrl, $this->generateUrl('done_punctis_popup'))) $popupref = true;
脚本完成后,我只检查 popupref 标志,如果是真的我只返回弹出模板,如果没有,我会返回普通模板。
到目前为止,所有非常好的工作(测试过)。然后,Symfony框架处理来自任何模板的表单提交,并登录用户将其重定向到原始的受保护页面 / home 或 / popup 。
您可能会问哪个错误?好了,因为系统基于引用值,如果用户在登录表单中没有出错,一切正常,但如果输入信息不正确(密码或用户名不正确),check_login脚本会将用户重定向回这次登录控制器只有问题,引用者不再是 / home 或 / popup ,而是 / login_check !!所以现在我的控制器不知道用户来自哪里,所以它不知道返回哪个模板。
您怎么看?
编辑(请求)
public function loginAction( )
{
$popupref = false;
$previousUrl = $this->getRequest()->headers->get('referer');
if(strpos($previousUrl, $this->generateUrl('done_punctis_popup'))) $popupref = true;
// Se è già loggato non deve vedere questa pagina quindi redirect
if( $this->get('security.context')->isGranted('ROLE_USER') && !$popupref)
return $this->redirect( $this->generateUrl('done_punctis_user_homepage'));
$request = $this->getRequest();
$session = $request->getSession();
// verifica di eventuali errori
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);
}
if(!$popupref) {
return $this->render('DonePunctisBundle:Pages:login.html.php', array(
'last_username' => $session->get(SecurityContext::LAST_USERNAME),
'error' => $error
));
} else {
return $this->render('DonePunctisBundle:Popup:popupSignup.html.php', array(
'last_username' => $session->get(SecurityContext::LAST_USERNAME),
'error' => $error
));
}
}
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
remember_me:
key: %secret%
lifetime: 3600
path: /
domain: ~
pattern: ^/
anonymous: ~
form_login:
login_path: /login
check_path: /login_check
logout:
path: /logout
target: /
在我改变一些名字的问题只是因为有一个更明确的解释,/ home实际上不存在,实际上所有需要授权的东西都使用普通模板,只需来自/ popup的调用需要弹出模板
PS。来自/ home或/ popup的用户是相同的,/ home和/ popup只是登录我网站的两种不同方式。