laravel 使用 socialite 的 facebook 数据删除回调实现
facebook data deletion callback implementation in laravel using socialite
我正在实施 Facebook 数据删除回调,但我真的迷路了,无法继续 Facebook 期待的 JSON
响应。
- Return 包含 URL 的 JSON 响应,用户可以在其中检查其删除请求的状态和字母数字确认代码。 JSON 响应具有以下形式:
{ url: '<url>', confirmation_code: '<code>' }
那是我迷路和卡住的部分。我的问题是
- URL 应该做什么或显示什么。
- 确认码之间的逻辑是什么
到目前为止,这是我在控制器上所做的。
<?php
namespace App\Http\Controllers\User\Auth\Socialite;
use App\Models\User;
use Illuminate\Http\Request;
class FacebookSocialLoginController extends SocialLoginFactory
{
public function provider(): string
{
return 'facebook';
}
public function dataDeletionCallback(Request $request)
{
$signed_request = $request->get('signed_request');
$data = $this->parse_signed_request($signed_request);
$user_id = $data['user_id'];
// here will delete the user base on the user_id from facebook
User::where([
['provider' => 'facebook'],
['provider_id' => $user_id]
])->forceDelete();
// here will check if the user is deleted
$isDeleted = User::withTrashed()->where([
['provider' => 'facebook'],
['provider_id' => $user_id]
])->find();
if ($isDeleted ===null) {
return response()->json([
'url' => '', // <------ i dont know what to put on this or what should it do
'code' => '', // <------ i dont know what is the logic of this code
]);
}
return response()->json([
'message' => 'operation not successful'
], 500);
}
private function parse_signed_request($signed_request) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$secret = config('service.facebook.client_secret'); // Use your app secret here
// decode the data
$sig = $this->base64_url_decode($encoded_sig);
$data = json_decode($this->base64_url_decode($payload), true);
// confirm the signature
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
error_log('Bad Signed JSON signature!');
return null;
}
return $data;
}
private function base64_url_decode($input) {
return base64_decode(strtr($input, '-_', '+/'));
}
}
- what is the URL should do or show.
这个 URL 的目的是文档所说的 - 为用户提供一种方法来检查他们的删除请求的状态。
并非所有应用都能在用户请求时立即删除所有个人用户数据。
有些人可能出于法律原因需要保留一部分数据;其他人可能只是需要一些额外的处理时间,因为该过程无法完全自动化地处理,需要人工参与。
所以用户得到这个状态检查 URL 以响应他们的请求 - 这样他们就可以在明天或两周或六个月后去访问那个 URL,然后检查他们的删除请求的状态 - 您现在是否能够删除所有数据,是否仍需要一些时间,是否有一些数据因法律原因而不会被删除,等等。
- what is the logic between the confirmation code
只是访问相同信息的不同方式。也许通过您提供的 URL 检查状态对用户来说还不够,所以他们可能想打电话或发送电子邮件给您的支持人员,询问他们删除请求的状态。然后他们可以将代码提供给您的支持人员,他们可以通过该代码查找必要的信息。
如果您查看文档中的代码示例,它们在状态检查 URL 和确认代码中使用相同的代码值。所以你可以对两者使用相同的代码。
创建它,将其存储在您的数据库中,并将特定用户的删除请求的状态与该代码相关联。
我正在实施 Facebook 数据删除回调,但我真的迷路了,无法继续 Facebook 期待的 JSON
响应。
- Return 包含 URL 的 JSON 响应,用户可以在其中检查其删除请求的状态和字母数字确认代码。 JSON 响应具有以下形式:
{ url: '<url>', confirmation_code: '<code>' }
那是我迷路和卡住的部分。我的问题是
- URL 应该做什么或显示什么。
- 确认码之间的逻辑是什么
到目前为止,这是我在控制器上所做的。
<?php
namespace App\Http\Controllers\User\Auth\Socialite;
use App\Models\User;
use Illuminate\Http\Request;
class FacebookSocialLoginController extends SocialLoginFactory
{
public function provider(): string
{
return 'facebook';
}
public function dataDeletionCallback(Request $request)
{
$signed_request = $request->get('signed_request');
$data = $this->parse_signed_request($signed_request);
$user_id = $data['user_id'];
// here will delete the user base on the user_id from facebook
User::where([
['provider' => 'facebook'],
['provider_id' => $user_id]
])->forceDelete();
// here will check if the user is deleted
$isDeleted = User::withTrashed()->where([
['provider' => 'facebook'],
['provider_id' => $user_id]
])->find();
if ($isDeleted ===null) {
return response()->json([
'url' => '', // <------ i dont know what to put on this or what should it do
'code' => '', // <------ i dont know what is the logic of this code
]);
}
return response()->json([
'message' => 'operation not successful'
], 500);
}
private function parse_signed_request($signed_request) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$secret = config('service.facebook.client_secret'); // Use your app secret here
// decode the data
$sig = $this->base64_url_decode($encoded_sig);
$data = json_decode($this->base64_url_decode($payload), true);
// confirm the signature
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
error_log('Bad Signed JSON signature!');
return null;
}
return $data;
}
private function base64_url_decode($input) {
return base64_decode(strtr($input, '-_', '+/'));
}
}
- what is the URL should do or show.
这个 URL 的目的是文档所说的 - 为用户提供一种方法来检查他们的删除请求的状态。
并非所有应用都能在用户请求时立即删除所有个人用户数据。
有些人可能出于法律原因需要保留一部分数据;其他人可能只是需要一些额外的处理时间,因为该过程无法完全自动化地处理,需要人工参与。
所以用户得到这个状态检查 URL 以响应他们的请求 - 这样他们就可以在明天或两周或六个月后去访问那个 URL,然后检查他们的删除请求的状态 - 您现在是否能够删除所有数据,是否仍需要一些时间,是否有一些数据因法律原因而不会被删除,等等。
- what is the logic between the confirmation code
只是访问相同信息的不同方式。也许通过您提供的 URL 检查状态对用户来说还不够,所以他们可能想打电话或发送电子邮件给您的支持人员,询问他们删除请求的状态。然后他们可以将代码提供给您的支持人员,他们可以通过该代码查找必要的信息。
如果您查看文档中的代码示例,它们在状态检查 URL 和确认代码中使用相同的代码值。所以你可以对两者使用相同的代码。
创建它,将其存储在您的数据库中,并将特定用户的删除请求的状态与该代码相关联。