Newscoop\GimmeBundle\Controller\UsersController::loginAction PHP Метод

loginAction() публичный Метод

Log in user
public loginAction ( Request $request ) : array
$request Symfony\Component\HttpFoundation\Request
Результат array
    public function loginAction(Request $request)
    {
        $zendRouter = $this->container->get('zend_router');
        $userService = $this->container->get('user');
        $em = $this->container->get('em');
        $username = $request->get('username');
        $password = $request->get('password');
        $targetPath = $request->get('_target_path');
        $response = new Response();
        if (!$username || !$password) {
            $response->setStatusCode(400);
            return $response;
        }
        $passwordEncoder = $this->container->get('newscoop_newscoop.password_encoder');
        $user = $em->getRepository('Newscoop\\Entity\\User')->findOneBy(array('username' => $username));
        if (!$user) {
            $user = $user = $em->getRepository('Newscoop\\Entity\\User')->findOneBy(array('email' => $username));
        }
        if (!$user instanceof \Newscoop\Entity\User) {
            throw new NotFoundHttpException("User not found");
        }
        if (!$passwordEncoder->isPasswordValid($user->getPassword(), $password, $user->getSalt())) {
            $response->setStatusCode(403);
            return $response;
        }
        $token = $userService->loginUser($user, 'frontend_area');
        $session = $request->getSession();
        $session->set('_security_frontend_area', serialize($token));
        $loginSuccessHandler = $this->container->get('newscoop_newscoop.security.authentication.frontend.success_handler');
        $loginSuccessHandler->onAuthenticationSuccess($request, $token);
        $response->setStatusCode($targetPath ? 302 : 200);
        $response->headers->set('X-Location', $targetPath ? $request->getUriForPath($targetPath) : $this->generateUrl('newscoop_gimme_users_getuser', array('id' => $user->getId()), true));
        return $response;
    }