예제 #1
0
 /**
  * 处理用户登录
  */
 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);
     }
 }
예제 #2
0
 /**
  * 登录设置
  *
  * 主要针对成功登录的用户进行Session、Cookie的设置
  *
  * @param array $user 用户信息
  * @param bool $cross_cookie true表示需要JSONP请求
  * @return void
  */
 private function _loginSetting($user, $cross_cookie = false)
 {
     // SESSION设置
     $session = Yii::$app->session;
     $is_register = $session->get('is_register');
     $session->destroy();
     $data = ['id' => $user['id'], 'mobile' => $user['mobile'], 'name' => $user['username'], 'email' => $user['email'], 'avatar' => $user['avatar'], 'gender' => $user['gender'], 'open_id' => $user['open_id']];
     if ($cross_cookie) {
         $session['cross_cookie'] = 1;
         $session['cookie_url'] = Url::toRoute(['sso/app-cookie'], true);
     }
     if ($is_register) {
         $session['is_register'] = $is_register;
     }
     $session[self::SESSION_KEY_USER] = $data;
     // COOKIE设置
     $cookies = Yii::$app->response->cookies;
     $expiredTime = time() + 60 * 60 * 24;
     unset($data['open_id']);
     $myCookie = [];
     foreach ($data as $key => $val) {
         $myCookie[$key] = ['name' => self::COOKIE_NAME_PREFIX . $key, 'value' => $val];
     }
     /*
             $myCookie = [
        'id' => [
            'name' => self::COOKIE_KEY_ID,
            'value' => $user['id'],
        ],
        'user_id' => [
            'name' => self::COOKIE_KEY_NAME,
            'value' => $user['mobile'],
        ],
        'avatar' => [
            'name' => 'avatar',
            'value' => $user['avatar'],
        ],
        'open_id' => [
            'name' => 'open_id',
            'value' => $user['open_id'],
        ],
             ];
     */
     Yii::$app->util->cookie($myCookie, $expiredTime);
     $returnUrl = $session->get('register_returnurl');
     $returnUrl = $returnUrl ? rawurldecode($returnUrl) : Url::toRoute(['ucenter/index'], true);
     $app = Yii::$app->util->judgTransUrl($returnUrl);
     if (!$app) {
         $app = ApplicationBaseInfo::getByAppUrl(parse_url(Url::toRoute(['ucenter/index'], true))['host']);
     }
     $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();
     }
 }
예제 #3
0
 /**
  * 判断传递的域名是否满足要求
  *
  * @param string $url 应用传递到数据中心的域名
  * @return boolean
  */
 public function judgTransUrl($url, $time = 1800)
 {
     if (!($app = Yii::$app->cache->get($url))) {
         if (!$this->regularUrl($url)) {
             return false;
         }
         $parseUrl = parse_url($url);
         if (!$parseUrl) {
             return false;
         }
         $appUrl = $parseUrl['host'];
         if (empty($appUrl)) {
             return false;
         }
         $app = ApplicationBaseInfo::getByAppUrl($appUrl);
         if (!$app) {
             return false;
         }
         Yii::$app->cache->set($url, $app, $time);
     }
     return $app;
 }