/** * Login * * <b>Request Type</b>: POST<br/><br/> * <b>Request Endpoint</b>:http://{server-domain}/chat/site/login<br/><br/> * <b>Content-type</b>: application/json<br/><br/> * <b>Summary</b>: This api is used for the help desk to login. * <br/><br/> * * <b>Request Params</b>:<br/> * email: string, the user email, required<br/> * password: string, the user password, required<br/> * <br/><br/> * * <b>Response Params:</b><br/> * ack: integer, mark the create result, 0 means create successfully, 1 means create fail<br/> * msg: string, if create fail, it contains the error message<br/> * data: array, json array to describe the users detail information<br/> * <br/><br/> * * <b>Request Example:</b><br/> * <pre> * { * "email" : "*****@*****.**", * "password" : "abc123" * } * </pre> * <br/><br/> * * <b>Response Example</b>:<br/> * <pre> * { * 'ack' : 1, * 'data' : { * "accessToken" : "7f2d1e92-9629-8429-00be-2d9c6d64acdb", * "userInfo" : { * "name" : "harry", * "avatar" : "path/to/avatar" * } * } * } * </pre> */ public function actionLogin() { $params = $this->getParams(); $deviceToken = $this->getParams('deviceToken'); $environment = $this->getParams('environment'); if (empty($params['email']) || empty($params['password'])) { throw new BadRequestHttpException("parameters missing"); } $helpdesk = HelpDesk::getByEmail($params['email']); if (empty($helpdesk)) { throw new ForbiddenHttpException("用戶不存在"); } if (!$helpdesk->isActivated) { throw new ForbiddenHttpException("用戶未激活,请激活后使用"); } if (!$helpdesk->isEnabled) { throw new ForbiddenHttpException("该账号已被禁用,请与管理员联系"); } if ($helpdesk->validatePassword($params['password'])) { $tokens = Token::getUnexpiredByUserId($helpdesk->_id); if (!empty($tokens)) { $data = ['isForcedOffline' => true, 'id' => $helpdesk->_id . '']; $accountId = $tokens[0]->accountId; Yii::$app->tuisongbao->triggerEvent(ChatConversation::EVENT_FORCED_OFFLINE, $data, [ChatConversation::CHANNEL_GLOBAL . $accountId]); //deviceToken changed, push forcedOffline if (empty($deviceToken) && !empty($helpdesk->deviceToken) || !empty($deviceToken) && !empty($helpdesk->deviceToken) && $deviceToken != $helpdesk->deviceToken) { $extra = ['deskId' => $helpdesk->_id . '', 'sentTime' => TimeUtil::msTime()]; ChatConversation::pushMessage($helpdesk->_id, ChatConversation::EVENT_FORCED_OFFLINE, $extra); } Token::updateAll(['$set' => ['expireTime' => new \MongoDate()]], ['_id' => ['$in' => Token::getIdList($tokens)]]); } $isFirstLogin = empty($helpdesk->lastLoginAt); $accessToken = Token::createByHelpDesk($helpdesk); if (isset($deviceToken)) { $helpdesk->loginDevice = HelpDesk::MOBILEAPP; } else { $helpdesk->loginDevice = HelpDesk::BROWSER; } $helpdesk->deviceToken = $deviceToken; $helpdesk->environment = $environment; $helpdesk->lastLoginAt = new \MongoDate(); $helpdesk->save(true, ['deviceToken', 'loginDevice', 'environment', 'lastLoginAt']); $userInfo = ['badge' => $helpdesk->badge, 'name' => $helpdesk->name, 'email' => $helpdesk->email, 'language' => $helpdesk->language, 'avatar' => empty($helpdesk->avatar) ? '' : $helpdesk->avatar, 'id' => (string) $helpdesk->_id, 'accountId' => (string) $helpdesk['accountId'], 'notificationType' => $helpdesk->notificationType, 'isFirstLogin' => $isFirstLogin]; return ["accessToken" => $accessToken['accessToken'], 'userInfo' => $userInfo]; } else { throw new ForbiddenHttpException("密码错误"); } }