/** * Login with username and password * * @return \Zend\Http\Response|ViewModel */ public function indexAction() { if ($this->auth->hasIdentity()) { return $this->redirect()->toRoute('lang'); } $viewModel = new ViewModel(); $services = $this->serviceLocator; /* @var $loginForm Login */ $loginForm = $this->forms[self::LOGIN]; /* @var $registerForm Register */ $registerForm = $this->forms[self::REGISTER]; /* @var $request \Zend\Http\Request */ $request = $this->getRequest(); if ($request->isPost()) { $data = $this->params()->fromPost(); $adapter = $services->get('Auth/Adapter/UserLogin'); // inject suffixes via shared Events $loginSuffix = ''; // @TODO: replace this by the Plugin LoginFilter $e = $this->getEvent(); $loginSuffixResponseCollection = $this->getEventManager()->trigger('login.getSuffix', $e); if (!$loginSuffixResponseCollection->isEmpty()) { $loginSuffix = $loginSuffixResponseCollection->last(); } $loginForm->setData($data); if (array_key_exists('credentials', $data) && array_key_exists('login', $data['credentials']) && array_key_exists('credential', $data['credentials'])) { $adapter->setIdentity($data['credentials']['login'] . $loginSuffix)->setCredential($data['credentials']['credential']); } $auth = $this->auth; $result = $auth->authenticate($adapter); if ($result->isValid()) { $user = $auth->getUser(); $language = $services->get('Core/Locale')->detectLanguage($request, $user); $this->logger->info('User ' . $user->login . ' logged in'); $ref = $this->params()->fromQuery('ref', false); if ($ref) { $ref = urldecode($ref); $url = preg_replace('~/[a-z]{2}(/|$)~', '/' . $language . '$1', $ref); $url = $request->getBasePath() . $url; } else { $urlHelper = $services->get('ViewHelperManager')->get('url'); $url = $urlHelper('lang', array('lang' => $language)); } $this->notification()->success('You are now logged in.'); return $this->redirect()->toUrl($url); } else { $loginName = $data['credentials']['login']; if (!empty($loginSuffix)) { $loginName = $loginName . ' (' . $loginName . $loginSuffix . ')'; } $this->logger->info('Failed to authenticate User ' . $loginName); $this->notification()->danger('Authentication failed.'); } } $ref = $this->params()->fromQuery('ref', false); if ($ref) { $req = $this->params()->fromQuery('req', false); if ($req) { $this->getResponse()->setStatusCode(Response::STATUS_CODE_401); $viewModel->setVariable('required', true); } $viewModel->setVariable('ref', $ref); } $allowRegister = $this->options->getEnableRegistration(); $allowResetPassword = $this->options->getEnableResetPassword(); if (isset($allowRegister)) { $viewModel->setVariables(['allowRegister' => $allowRegister, 'allowResetPassword' => $allowResetPassword]); } $viewModel->setVariable('loginForm', $loginForm); $viewModel->setVariable('registerForm', $registerForm); /* @deprecated use loginForm instead of form in your view scripts */ $viewModel->setVariable('form', $loginForm); return $viewModel; }