Exemplo n.º 1
0
 /**
  * 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;
 }