在 PHP 中管理 Sign with Apple 重定向
Manage Sign with Apple redirect in PHP
我正在尝试在后端服务器上为所有本身不支持它的设备实施“使用 Apple 登录”工作流程。
我尝试过使用和不使用第 3 方库。现在我正在使用 patrickbussmann/oauth2-apple
.
我通过授权URL成功授权了账户,但是重定向URL没有字段(尤其是'code'那个)。
这就是我生成授权的方式 URL:
function get_apple_signin_url() {
$options = [
'scope' => ['email'],
];
$authUrl = $this->provider->getAuthorizationUrl($options);
$_SESSION['oauth2state'] = $this->provider->getState();
return '{"url": "'.$authUrl.'"}';
}
得到的URL是正确的,一直到登录结束:
https://appleid.apple.com/auth/authorize?scope=email&state=a9583c14408af68ac05cbfed3a8274ef&response_type=code&approval_prompt=auto&redirect_uri=MY_REDIRECT_URI&client_id=MY_CLIENT_ID&response_mode=form_post
这是重定向 uri (apple_auth_redirect.php
) 中的代码:
<?php
if (isset($_POST['code'])) {
$code = urlencode($_POST['code']);
header("Location: intent://callback?apple_id_token=".$code);
} else {
echo "no_code";
}
从授权URL可以看出,response_mode
是form_post
。如果我使用 query
作为 response_mode
我获得代码,但我不能插入 email
作为范围。 Incorporating Sign in with Apple into Other Platforms (developer.apple.com) 的 response_mode
中有更多详细信息。
这是我目前实施的授权工作流程:
- 移动应用在服务器上调用
get_apple_signin_url
。
- 移动应用程序在浏览器中打开 url。
- 通过Apple网站授权完成,浏览器重定向到redirect uri
apple_auth_redirect.php
.
- 代码应该被
apple_auth_redirect.php
解析,但是重定向请求没有字段。
我已经为 Google 执行了相同的过程并且华为登录没有问题。
我解决了这个问题。我以为我没有正确处理重定向。但是,问题是我写的 redirect_uri=MY_REDIRECT_URI
没有“www”,只是域,例如“my_domain.com”。使用“www”,例如“www.my_domain.com”,它起作用了。
我正在尝试在后端服务器上为所有本身不支持它的设备实施“使用 Apple 登录”工作流程。
我尝试过使用和不使用第 3 方库。现在我正在使用 patrickbussmann/oauth2-apple
.
我通过授权URL成功授权了账户,但是重定向URL没有字段(尤其是'code'那个)。 这就是我生成授权的方式 URL:
function get_apple_signin_url() {
$options = [
'scope' => ['email'],
];
$authUrl = $this->provider->getAuthorizationUrl($options);
$_SESSION['oauth2state'] = $this->provider->getState();
return '{"url": "'.$authUrl.'"}';
}
得到的URL是正确的,一直到登录结束:
https://appleid.apple.com/auth/authorize?scope=email&state=a9583c14408af68ac05cbfed3a8274ef&response_type=code&approval_prompt=auto&redirect_uri=MY_REDIRECT_URI&client_id=MY_CLIENT_ID&response_mode=form_post
这是重定向 uri (apple_auth_redirect.php
) 中的代码:
<?php
if (isset($_POST['code'])) {
$code = urlencode($_POST['code']);
header("Location: intent://callback?apple_id_token=".$code);
} else {
echo "no_code";
}
从授权URL可以看出,response_mode
是form_post
。如果我使用 query
作为 response_mode
我获得代码,但我不能插入 email
作为范围。 Incorporating Sign in with Apple into Other Platforms (developer.apple.com) 的 response_mode
中有更多详细信息。
这是我目前实施的授权工作流程:
- 移动应用在服务器上调用
get_apple_signin_url
。 - 移动应用程序在浏览器中打开 url。
- 通过Apple网站授权完成,浏览器重定向到redirect uri
apple_auth_redirect.php
. - 代码应该被
apple_auth_redirect.php
解析,但是重定向请求没有字段。
我已经为 Google 执行了相同的过程并且华为登录没有问题。
我解决了这个问题。我以为我没有正确处理重定向。但是,问题是我写的 redirect_uri=MY_REDIRECT_URI
没有“www”,只是域,例如“my_domain.com”。使用“www”,例如“www.my_domain.com”,它起作用了。