コード例 #1
0
 public function login()
 {
     $user = $this->Auth->identify();
     if (!$user) {
         $this->set(['success' => false, 'message' => __('Invalid email or password'), '_serialize' => ['success', 'message']]);
     } else {
         $expire = !is_null(Configure::read('AuthToken.expire')) ? Configure::read('AuthToken.expire') : 3600;
         $access_token = JWT::encode(['sub' => $user['id'], 'exp' => time() + $expire], Security::salt());
         $refresh_token = JWT::encode(['sub' => $user['id'], 'ref' => time()], Security::salt());
         $authToken = $this->Users->AuthToken->newEntity();
         $authToken->user_id = $user['id'];
         $authToken->access_token = $access_token;
         $authToken->refresh_token = $refresh_token;
         $this->Users->AuthToken->save($authToken);
         $this->set(['success' => true, 'data' => ['access_token' => $access_token, 'refresh_token' => $refresh_token, 'id' => $user['id'], 'username' => $user['username'], 'email' => $user['email']], '_serialize' => ['success', 'data']]);
     }
 }
コード例 #2
0
 public function token()
 {
     if ($this->request->is('post')) {
         $table = TableRegistry::get('AuthToken');
         $refresh_token = $this->request->data('refresh_token');
         $authToken = $table->find('all')->where(['refresh_token' => $refresh_token])->first();
         if ($authToken) {
             $expire = !is_null(Configure::read('AuthToken.expire')) ? Configure::read('AuthToken.expire') : 3600;
             $access_token = JWT::encode(['sub' => $authToken['user_id'], 'exp' => time() + $expire], Security::salt());
             $refresh_token = JWT::encode(['sub' => $authToken['user_id'], 'ref' => time()], Security::salt());
             $authToken->access_token = $access_token;
             $authToken->refresh_token = $refresh_token;
             $table->save($authToken);
             $this->set(['success' => true, 'data' => ['access_token' => $access_token, 'refresh_token' => $refresh_token], '_serialize' => ['success', 'data']]);
         } else {
             $this->set(['success' => false, 'refresh_token_expired' => true, '_serialize' => ['success', 'refresh_token_expired']]);
         }
     }
 }
コード例 #3
0
ファイル: JWT.php プロジェクト: quankim/php-jwt
 /**
  * Encode a PHP object into a JSON string.
  *
  * @param object|array $input A PHP object or array
  *
  * @return string JSON representation of the PHP object or array
  *
  * @throws DomainException Provided object could not be encoded to valid JSON
  */
 public static function jsonEncode($input)
 {
     $json = json_encode($input);
     if (function_exists('json_last_error') && ($errno = json_last_error())) {
         JWT::handleJsonError($errno);
     } elseif ($json === 'null' && $input !== null) {
         throw new DomainException('Null result with non-null input');
     }
     return $json;
 }
コード例 #4
0
 /**
  * Decode JWT token.
  *
  * @param string $token JWT token to decode.
  *
  * @return object|null The JWT's payload as a PHP object, null on failure.
  */
 protected function _decode($token)
 {
     try {
         $payload = JWT::decode($token, Security::salt(), $this->_config['allowedAlgs']);
         return $payload;
     } catch (Exception $e) {
         if (Configure::read('debug')) {
             throw $e;
         }
         $this->_error = $e;
     }
 }