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