реализация обратного вызова для удаления данных facebook в laravel с использованием socialite

Я реализую обратный вызов для удаления данных facebook, но я действительно потерялся и не могу продолжить ответ JSON, который ожидает facebook.

  • Вернуть ответ 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, '-_', '+/'));
    }
}


person KevDev    schedule 27.02.2021    source источник
comment
Хороший вопрос. Я думаю, что многие разработчики захотят узнать, как сделать функцию удаления данных Facebook в Laravel теперь, когда она требуется Facebook.   -  person Andrew Koper    schedule 10.04.2021


Ответы (1)


  1. что должен делать или показывать URL.

Цель этого URL-адреса - то, что сказано в документации, - предоставить пользователю возможность проверить статус своего запроса на удаление.

Не все приложения смогут удалить все личные данные пользователя сразу после того, как пользователь запросит их.
Некоторым может потребоваться сохранить часть данных по юридическим причинам; другим может просто потребоваться дополнительное время обработки, потому что процесс не может быть полностью автоматизирован, и нужно вмешаться человеку.

Таким образом, пользователю предоставляется этот URL-адрес проверки статуса в ответ на их запрос - чтобы они могли посетить этот URL-адрес завтра, или через две недели, или шесть месяцев, и проверить статус своего запроса на удаление - смогли ли вы удалить все данные к настоящему моменту, это займет какое-то время, есть ли какие-то данные, которые не будут удалены по юридическим причинам и т. д.

  1. какова логика между кодом подтверждения

Просто другой способ получить доступ к той же информации. Возможно, проверки статуса через предоставленный вами URL-адрес недостаточно для пользователя, поэтому он может захотеть позвонить или отправить электронное письмо в вашу службу поддержки, чтобы узнать о статусе своего запроса на удаление. Затем они могут передать этот код вашим сотрудникам службы поддержки, и они смогут найти через него необходимую информацию.

Если вы проверите примеры кода в документации, они используют одно и то же значение кода в URL-адресе проверки статуса и в качестве кода подтверждения. Таким образом, вы можете использовать один и тот же код для обоих.
Создайте его, сохраните в своей базе данных и свяжите статус запроса на удаление конкретного пользователя с этим кодом.

person CBroe    schedule 01.03.2021