Laravel 中使用 Socialite 实现 facebook 数据删除回调

Mar*_*rkB 4 php facebook laravel laravel-socialite

我正在实施 Facebook 数据删除回调,但我真的迷失了,我无法继续JSONFacebook 所期望的响应。

  • 返回一个 JSON 响应,其中包含用户可以在其中检查删除请求状态的 URL 和字母数字确认代码。JSON 响应具有以下形式:

{ url: '<url>', confirmation_code: '<code>' }

这就是我迷失和卡住的部分。我的问题是

  1. URL 应该做什么或显示什么。
  2. 确认码之间的逻辑是什么

到目前为止,这是我在控制器上所做的事情。

<?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, '-_', '+/'));
    }
}

Run Code Online (Sandbox Code Playgroud)

CBr*_*roe 7

\n
    \n
  1. URL 应该做什么或显示什么。
  2. \n
\n
\n

该 URL 的目的如文档所述 - 为用户提供一种方法来检查其删除请求的状态。

\n

并非所有应用程序都能够在用户请求时立即删除所有个人用户数据。
\n出于法律原因,有些人可能需要保留数据的子集;其他人可能只是需要一些额外的处理时间,因为该过程无法以完全自动化的方式处理,并且需要人类参与。

\n

因此,用户会收到此状态检查 URL 以响应其请求 \xe2\x80\x93,以便他们可以在明天、两周或六个月后访问该 URL,并检查其删除请求的状态 - 是您现在可以删除所有数据,是否还需要一些时间,是否有一些数据因法律原因而无法删除\xe2\x80\x99,等等。

\n
\n
    \n
  1. 确认码之间的逻辑是什么
  2. \n
\n
\n

只是访问相同信息的不同方式。也许通过您提供的 URL 检查状态对于用户来说还不够,因此他们可能需要致电或发送电子邮件给您的支持人员,以询问其删除请求的状态。然后他们可以为您的支持人员提供该代码,他们可以通过该代码查找必要的信息。

\n

如果您检查文档中的代码示例,您会发现它们在状态检查 URL 中使用相同的代码值,并作为确认代码。因此您可以对两者使用相同的代码。
\n创建它,将其存储在数据库中,并将特定用户\xe2\x80\x99s 删除请求的状态与该代码相关联。

\n