/** * 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; }