在Symfony,FOS loginAction中注入用户数据

时间:2016-08-24 17:03:01

标签: php fosuserbundle symfony

我正在编写Symfony 3.0应用程序,我遇到以下情况:

  • 系统提供不同的登录页面和注册页面(每个子网站一个)
  • 用户可以使用相同的用户名登录不同的子网站,但帐户可以单独管理。

我的想法是使用@表示法在用户名字段中保存子网站域的唯一名称,例如: 用户a.ndrew可以使用相同的用户名访问domain1domain2,但系统会存储2个不同的帐户,其中包含用户名a.ndrew@domain1a.ndrew@domain2。 我通过覆盖RegistrationController操作自动处理此问题,并且在注册过程中工作正常,但现在我正在尝试自动推送" @ domain"登录时用户名中的数据没有运气。我覆盖loginAction,但我不了解如何在用户名中推送数据。

编辑(tnx @malcom) 这是我的loginAction名为companyUserLoginAction,只是检查companyName是否存在并重定向到FOS loginAction,我希望能够添加@companyName在用户在登录表单中提供的用户名的末尾,但我不知道控制器处理此信息的位置: `

/**
 * @Route("/{companyName}/login")
 */
public function companyUserLoginAction(Request $request, $companyName)
{
    $em = $this->getDoctrine()->getManager();
    $company = $em->getRepository('CompanyBundle:Company')->findOneBy(array('name' => $companyName));
    if ($company == null)
    {
        throw new NotFoundHttpException();
    }

    return $this->loginAction($request);

}

/**
 *Default FOS loginAction
 */
public function loginAction(Request $request)
{


    /** @var $session \Symfony\Component\HttpFoundation\Session\Session */
    $session = $request->getSession();


    if (class_exists('\Symfony\Component\Security\Core\Security')) {
        $authErrorKey = Security::AUTHENTICATION_ERROR;
        $lastUsernameKey = Security::LAST_USERNAME;
    } else {
        // BC for SF < 2.6
        $authErrorKey = SecurityContextInterface::AUTHENTICATION_ERROR;
        $lastUsernameKey = SecurityContextInterface::LAST_USERNAME;
    }

    // get the error if any (works with forward and redirect -- see below)
    if ($request->attributes->has($authErrorKey)) {
        $error = $request->attributes->get($authErrorKey);
    } elseif (null !== $session && $session->has($authErrorKey)) {
        $error = $session->get($authErrorKey);
        $session->remove($authErrorKey);
    } else {
        $error = null;
    }

    if (!$error instanceof AuthenticationException) {
        $error = null; // The value does not come from the security component.
    }

    // last username entered by the user
    $lastUsername = (null === $session) ? '' : $session->get($lastUsernameKey);

    if ($this->has('security.csrf.token_manager')) {
        $csrfToken = $this->get('security.csrf.token_manager')->getToken('authenticate')->getValue();
    } else {
        // BC for SF < 2.4
        $csrfToken = $this->has('form.csrf_provider')
            ? $this->get('form.csrf_provider')->generateCsrfToken('authenticate')
            : null;
    }

    return $this->renderLogin(array(
        'last_username' => $lastUsername,
        'error' => $error,
        'csrf_token' => $csrfToken,
    ));
}

} `

0 个答案:

没有答案