在Oauth Login之后将用户发送到REQUEST_URI

时间:2018-06-06 22:13:19

标签: php google-oauth google-api-php-client

我正在使用Google PHP客户端库对网站中的用户进行身份验证。使用非常接近示例in the docs

但是,用户在登录后始终会重定向到主页,即site.com/

在登录后将用户退回到请求的网址的正确方法是什么,例如site.com/requested-uri

我尝试通过index.php在初始请求中传递查询参数:

$redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php?redirect=' . $_SERVER['REQUEST_URI'];

然后将其传递给docs的示例代码:

$uri = parse_url($_SERVER["REQUEST_URI"]);
parse_str($uri['query'], $query);
$redirect = $query['redirect'];

if (!isset($_GET['code'])) {
  $auth_url = $client->createAuthUrl();
  header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
} else {
  $client->authenticate($_GET['code']);
  $_SESSION['access_token'] = $client->getAccessToken();
  $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . $redirect;
  header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}

但是,它仍然在没有请求的URI的情况下重定向。

我觉得必须有办法在PHP库中内置这个。知道如何使这项工作吗?

1 个答案:

答案 0 :(得分:1)

您可以使用$client->setState($_SERVER["REQUEST_URI"]);。验证后,您可以从$_GET['state']收到状态。

我不知道这个方法是否正确,但我在我的应用程序中使用它。