/** * 验证码输出 */ public function indexAction() { $namespace = $this->_request->getQuery('ns', 'default'); $size = $this->_request->getQuery('sz'); $bootstrap = $this->getInvokeArg('bootstrap'); // Don't auto render this action $this->_helper->viewRenderer->setNoRender(); $options = $bootstrap->getOption('seccode'); // 设置大小 if (false !== strpos($size, 'x')) { list($w, $h) = explode('x', $size, 2); if (abs((int) $w) && abs((int) $h)) { $options['image']['width'] = abs((int) $w); $options['image']['height'] = abs((int) $h); } } Oray_Seccode::getInstance()->setConfig($options)->display(Oray_Seccode::TYPE_IMAGE, Oray_Seccode::LENGTH_DEFAULT, $namespace); }
/** * 登陆接口 */ public function indexAction() { // 关闭缓存 $this->_response->setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', true)->setHeader('Pragma', 'no-cache', true); $userId = trim($this->_request->getPost('uid')); $orgId = trim($this->_request->getPost('orgid')); $domain = $this->_request->getPost('domain'); $password = trim($this->_request->getPost('password')); $seccode = $this->_request->getPost('seccode'); $remember = (bool) $this->_request->getPost('remember'); // 来源地址 $referer = $this->_request->getServer('HTTP_REFERER', $this->options['sites']['www']); $referer = preg_replace('/[\\#\\?].*/i', '', $referer); $redirect = $this->_request->getPost('redirect'); $error = null; do { if (empty($userId) || empty($password)) { $error = 'params'; break; } if (false === strpos($userId, '@')) { $userId .= '@' . $orgId; } list(, $suffix) = explode('@', $userId); // 验证码 if (Oray_Seccode::getInstance()->getCode('login')) { if (empty($seccode) || !Oray_Seccode::isValid($seccode, 'login')) { $error = 'seccode'; break; } Oray_Seccode::clear('login'); } $adapter = new Tudu_Auth_Adapter_User(Tudu_Dao_Manager::getDb(Tudu_Dao_Manager::DB_MD)); $adapter->setUsername($userId)->setPassword($password); $result = $adapter->authenticate(); if (!$result->isValid()) { $message = $result->getMessages(); $error = isset($message[0]) ? $message[0] : 'failure'; break; } } while (false); // 登陆失败 if (null !== $error) { $referer .= '?error=' . $error; if ($redirect) { $referer .= '&redirect=' . urlencode($redirect); } $this->referer($referer); return; } $identity = $result->getIdentity(); $identity['referer'] = $referer; $isHttps = $identity['ishttps']; // 检测登陆IP写入登录日志 $clientIp = $this->_request->getClientIp(); $daoIp = Tudu_Dao_Manager::getDao('Dao_Md_Ip_Info', Tudu_Dao_Manager::DB_MD); $ipInfo = $daoIp->getInfoByIp($clientIp); if (null !== $ipInfo) { $identity['local'] = $ipInfo->city; } $logId = $this->_loginLog(array('orgid' => $identity['orgid'], 'uniqueid' => $identity['uniqueid'], 'address' => $identity['username'], 'truename' => $identity['truename'], 'ip' => $clientIp, 'local' => !empty($identity['local']) ? $identity['local'] : null)); $identity['loginlogid'] = $logId; $identity = $this->_loginFilter($identity); $this->_user->clearCache($identity['username']); if (Zend_Session::isStarted()) { session_unset(); Zend_Session::namespaceUnset(self::SESSION_NAMESPACE); Zend_Session::regenerateId(); } $this->session = new Zend_Session_Namespace(self::SESSION_NAMESPACE, true); $this->session->auth = array_merge($identity, array('logintime' => $this->_timestamp)); $server = $this->getServer($identity['orgid']); $names = $this->options['cookies']; // 验证相关的Cookies $this->_setCookies(array($names['username'] => $identity['username'], $names['server'] => $server), $remember ? $this->_timestamp + 86400 * 30 : null); // 其它场合要用到的Cookies,永久。 $this->_setCookies(array($names['track'] => base64_encode($referer)), $this->_timestamp + 86400 * 365); // 记住自动登录信息 if ($remember) { $daoSession = Tudu_Dao_Manager::getDao('Dao_Md_User_Session', Tudu_Dao_Manager::DB_MD); $authId = Dao_Md_User_Session::getSessionId($identity['userid'] . '@' . $identity['orgid']); $daoSession->createSession(array('sessionid' => $authId, 'orgid' => $identity['orgid'], 'userid' => $identity['userid'], 'logintime' => $this->_timestamp, 'loginip' => $clientIp, 'expiretime' => $this->_timestamp + 86400 * 30)); // 自动登录Cookies,一个月。 $this->_setCookies(array($names['auth'] => $authId), $this->_timestamp + 86400 * 30); $this->session->auth['authid'] = $authId; } // 是否使用ssl if (!$redirect) { $protocol = $identity['ishttps'] ? 'https:' : 'http:'; $redirect = $protocol . '//' . $server . '/frame'; } $this->referer($redirect); }