2013-04-18 81 views
1

我有两个捆绑userBundle和xxxBundle。我想在验证用户包中的用户之后将其重定向到xxxBundle。但是,根据角色(ROLE_ADMIN和ROLE_USER),我会将他重定向到两个不同的路由(route1,route2)。symfony认证后重定向用户

我加入这个控制器我userBundle

class SecurityController extends Controller 
{ 
    public function loginAction() 
    { 
    if ($this->get('security.context')->isGranted('ROLE_ADMIN')) { 
     return $this->redirect($this->generateUrl('route1')); 

    } 
if ($this->get('security.context')->isGranted('ROLE_USER')) { 
     return $this->redirect($this->generateUrl('route2')); 

    } 

    $request = $this->getRequest(); 
    $session = $request->getSession(); 

    // On vérifie s'il y a des erreurs d'une précédent soumission du formulaire 
    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 $this->render('UserBundle:Security:login.html.twig', array(
     // Valeur du précédent nom d'utilisateur rentré par l'internaute 
     'last_username' => $session->get(SecurityContext::LAST_USERNAME), 
     'error'   => $error, 
    )); 
    } 

但是,这并没有给出相应的结果是:一个正确的用户名和密码,用户将被重定向到欢迎页面symfony的。 有没有人对此有过解释?

我symfony的文件,我可以使用hiddden领域如下控制从登录表单的重定向中发现:

{# src/Acme/SecurityBundle/Resources/views/Security/login.html.twig #} 
{% if error %} 
    <div>{{ error.message }}</div> 
{% endif %} 

<form action="{{ path('login_check') }}" method="post"> 
    <label for="username">Username:</label> 
    <input type="text" id="username" name="_username" value="{{ last_username }}" /> 

    <label for="password">Password:</label> 
    <input type="password" id="password" name="_password" /> 

    <input type="hidden" name="_target_path" value="account" /> 

    <input type="submit" name="login" /> 
</form> 

问:我怎么可能parametrise路线负责用户和管理员。

+0

使用访问控制列表(ACL)会更合适吗? – user2269869

+0

你确定'route1'和'route2'存在吗? Symfony可能会向您提供不存在的路由的欢迎URL。也许增加一些调试(var_dump/die)来看看发生了什么? –

+0

路由route1和route2是我自己定义的捆绑包的路由@PhillSparks – user2269869

回答

2

使用_target_path输入字段,并将经过身份验证的用户定向到带有来自您的控制器的路由。在控制器内部,您可以检查用户的角色并根据该角色转发给其他控制器。