예제 #1
0
 /**
  * Hàm này đăng nhập người dùng dựa trên 1 SignInToken
  *
  * @param string $token SignInToken được truyền sang từ id.vatgia.com
  */
 function signInByToken($token)
 {
     $config = $this->getServiceLocator()->get('Config');
     $secretKey = $config['sso']['id.vatgia.com_IKI']['secretKey'];
     $publicKey = $config['oauths']['id.vatgia.com']['publicKey'];
     $s = new SignInToken(array(), $secretKey, $publicKey);
     if (SSOHelper::isRefererValid() && ($signinErr = $s->decrypt($token)) == SignInToken::ERROR_NONE) {
         // Header này chỉ định dành cho IE, để cho phép cross domain cookie
         header('P3P: CP="CAO PSA OUR"');
         $data = $s->getData();
         // dữ liệu của SignInToken
         $info = $data['info'];
         // Vì id.vatgia.com chỉ cung cấp Họ Đệm và Tên, bạn có thể lấy tên đầy đủ như dưới đây
         $info['name'] = trim($info['first_name'] . ' ' . $info['last_name']);
         /* @var $userMapper \User\Model\UserMapper */
         $userMapper = $this->getServiceLocator()->get('User\\Model\\UserMapper');
         if (($user = $userMapper->get(null, null, $info['email'])) == null) {
             $user = new \User\Model\User();
             $user->setEmail($info['email']);
             $user->setFullName($info['name']);
             $user->setAddress($info['address']);
             $user->setBirthday($info['dob']);
             $user->setMobile($info['phone']);
             $user->setActive(1);
             $user->setRegisteredDate(date('Y-m-d H:i:s'));
             $userMapper->save($user);
         }
         // TODO lưu lại thông tin OAuth2 Access Token dùng để xác thực tài khoản trước khi lấy thông tin bảo kim...
         //$this->setState('oauth2_access_token', $data['oauth2_access_token']);
         // hoặc : $_SESSION['oauth2_access_token'] = $data['oauth2_access_token'];
         // Lưu lại gsn vào cookie
         SSOHelper::saveGSN($data['gsn'], $data['expired_time']);
         return $user;
     } else {
         echo $signinErr;
     }
     return null;
 }