/** * 处理用户登录 */ public function actionDoLogin() { header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'); $mUserBase = new UserBaseInfo(); $util = Yii::$app->util; $session = Yii::$app->session; $request = Yii::$app->getRequest(); if (!$request->getIsAjax()) { $util->formatResData(1301, 'illegal_request', ['msg' => '非法请求']); } $returnUrl = $session->get('register_returnurl'); $returnUrl = $returnUrl ? rawurldecode($returnUrl) : Url::toRoute(['ucenter/index'], true); $app = Yii::$app->util->judgTransUrl($returnUrl); if (!$app) { $parseUrl = parse_url(Url::toRoute(['ucenter/index'], true)); $app = ApplicationBaseInfo::getByAppUrl($parseUrl['host']); } $post = Yii::$app->request->post(); $post = array_map('htmlEntityString', $post); $post = array_map('trim', $post); $userId = $post['user_id']; $password = $post['password']; $code = $post['code']; // 用户已登录 if ($this->isLogin) { $util->formatResData(0, 'success', ['url' => $returnUrl, 'appCookieUrl' => Url::toRoute(['sso/app-cookie'], true)]); } if ($session['login-fail-count'] >= 3) { $captcha = $this->createAction('captchaUserRegister'); if (!$captcha->validate($code, false)) { $util->formatResData(1201, 'captcha_error', ['msg' => '验证码错误']); } } if (empty($userId) || empty($password)) { $util->formatResData(1401, 'not_empty_error', ['msg' => '账号或密码不能为空']); } $user = $mUserBase->login($userId, $password); // p($user);die; if ($user) { $session->destroy(); $session[UserBaseInfo::SESSION_KEY_USER] = $user; if (isset($session['login-fail-count'])) { unset($session['login-fail-count']); } $cookies = Yii::$app->response->cookies; $times = time() + 60 * 60 * 4; $id = ['name' => UserBaseInfo::COOKIE_KEY_ID, 'value' => $user['id'], 'expire' => $times]; $userId = ['name' => UserBaseInfo::COOKIE_KEY_NAME, 'value' => $user['name'], 'expire' => $times]; $userMobile = ['name' => UserBaseInfo::COOKIE_NAME_PREFIX . 'mobile', 'value' => $user['mobile'], 'expire' => $times]; $userEmail = ['name' => UserBaseInfo::COOKIE_NAME_PREFIX . 'email', 'value' => $user['email'], 'expire' => $times]; $userGender = ['name' => UserBaseInfo::COOKIE_NAME_PREFIX . 'gender', 'value' => $user['gender'], 'expire' => $times]; $avatar = ['name' => 'avatar', 'value' => $user['avatar'], 'expire' => $times]; $openId = ['name' => 'open_id', 'value' => $user['open_id'], 'expire' => $times]; $cookie = ['id' => $id, 'userId' => $userId, 'avatar' => $avatar, 'openId' => $openId, 'mobile' => $userMobile, 'email' => $userEmail, 'gender' => $userGender]; $util->cookie($cookie, $times); $appId = $app['app_id']; $data = ['user_id' => $user['id'], 'login_ip' => Yii::$app->util->getClientIP()]; try { $loginLogModel = Yii::$app->sharding->getModel('UserLoginLog', $appId); $loginLogModel->store($data); } catch (\Exception $res) { echo $res->getMessage(); } $result = ['code' => 0, 'msg' => 'success', 'data' => ['url' => $returnUrl, 'appCookieUrl' => Url::toRoute(['sso/app-cookie'], true)]]; //$util->formatResData(0,'success', ['url' => $returnUrl]); echo json_encode($result); } else { $loginFailCount = $session['login-fail-count']; if (isset($session['login-fail-count'])) { $loginFailCount++; $session['login-fail-count'] = $loginFailCount; } else { $session['login-fail-count'] = 1; } $util = Yii::$app->util; $util->formatResData(1101, 'login_fail', $loginFailCount); } }