/** * Action for logging in a user * @return JsonModel */ public function loginAction() { if ($this->request->isOptions()) { return new JsonModel(); } if ($this->request->isPost()) { $loginForm = new LoginForm(); $loginFilter = new LoginFilter(); $loginForm->setInputFilter($loginFilter); $post = get_object_vars(json_decode($this->request->getContent())); $loginForm->setData($post); if (!$loginForm->isValid()) { $errorMessages = array(); foreach ($loginForm->getMessages() as $elementName => $messages) { foreach ($messages as $message) { $errorMessages[$elementName] = $message; } } return new JsonModel(array('error' => 1, 'message' => 'You have an error in your form. Please try again.', 'formErrors' => $errorMessages)); } $formData = $loginForm->getData(); $authAdapter = new AuthAdapter($this->getServiceLocator()->get('Zend\\Db\\Adapter\\Adapter')); $authAdapter->setTableName('lt_user'); $authAdapter->setIdentityColumn('email'); $authAdapter->setCredentialColumn('password'); $authAdapter->setIdentity($formData['email']); $authAdapter->setCredential($formData['password']); $result = $authAdapter->authenticate(); if (!$result->isValid()) { return new JsonModel(array('error' => 1, 'message' => 'Error while logging in. Please try again')); } else { $auth = $this->getServiceLocator()->get('AuthService'); $objectManager = $this->getServiceLocator()->get('Doctrine\\ORM\\EntityManager'); $user = $objectManager->getRepository('Application\\Entity\\LtUser')->findOneBy(array('email' => $formData['email'])); $date = new \DateTime(); $hashRandomize = uniqid('swetea', true); $authToken = md5($formData['email'] . $date->format('Y-m-d') . $hashRandomize); $user->setAuthtoken($authToken); $storage = $auth->getStorage(); $storage->write(array('contactName' => $user->getContactname(), 'userGroup' => $user->getUsergroup(), 'email' => $user->getEmail(), 'userId' => $user->getUserId())); $objectManager->persist($user); $objectManager->flush(); return new JsonModel(array('error' => 0, 'message' => 'Login successful', 'authToken' => $authToken, 'userGroup' => $user->getUsergroup())); } } else { $this->response->setStatusCode(405); return new JsonModel(array('error' => 1, 'message' => 'Request Method not allowed')); } }