فراخوان حذف داده
فراخوانهای لغو دسترسی و حذف دادهٔ مورد نیاز متا، قالب درخواست امضاشده، پاسخ JSON مورد انتظار و چگونگی گزارش وضعیت حذف.
دو فراخوان متمایز
متا دو نقطهٔ پایانی جداگانه را الزامی میکند. این دو با اقدامات متفاوت کاربر فعال میشوند و نباید قابل تعویض در نظر گرفته شوند.
- فراخوان لغو دسترسی
- زمانی فعال میشود که کاربر اپلیکیشن را از حساب متای خود حذف کند. هما دسترسی را لغو و اتصال را غیرفعال میکند. این کار بهخودیخود رکوردهای تاریخی را پاک نمیکند.
- فراخوان حذف داده
- زمانی فعال میشود که کاربر حذف دادههایی را که اپلیکیشن دربارهٔ او نگه میدارد درخواست کند. هما باید آن دادهها را پاک کند و وضعیتی قابل بررسی به کاربر گزارش دهد.
| هدف | نقطهٔ پایانی |
|---|---|
| فراخوان لغو دسترسی | https://meta.homacrm.com/api/meta/deauthorize |
| فراخوان حذف داده | https://meta.homacrm.com/api/meta/data-deletion |
| راهنمای قابل خواندن برای انسان | https://meta.homacrm.com/data-deletion |
قالب درخواست امضاشده
هر دو فراخوان یک پارامتر signed_request دریافت میکنند: دو بخش base64url که با یک نقطه جدا شدهاند. بخش اول امضای HMAC و بخش دوم بار دادهٔ JSON است. پیش از اعتماد به هر فیلدی، امضا را بررسی کنید.
import crypto from 'node:crypto'
function base64UrlDecode(input: string) {
return Buffer.from(input.replace(/-/g, '+').replace(/_/g, '/'), 'base64')
}
function parseSignedRequest(signedRequest: string) {
const [encodedSig, encodedPayload] = signedRequest.split('.')
if (!encodedSig || !encodedPayload) return null
const expected = crypto
.createHmac('sha256', process.env.META_APP_SECRET!)
.update(encodedPayload)
.digest()
const received = base64UrlDecode(encodedSig)
if (
received.length !== expected.length ||
!crypto.timingSafeEqual(received, expected)
) {
return null
}
return JSON.parse(base64UrlDecode(encodedPayload).toString('utf8'))
}پاسخ مورد انتظار
فراخوان حذف داده باید یک JSON بازگرداند که شامل نشانیای برای بررسی وضعیت درخواست توسط کاربر و یک کد تأیید برای شناسایی آن باشد.
{
"url": "https://meta.homacrm.com/data-deletion?code=abc123",
"confirmation_code": "abc123"
}export async function POST(request: Request) {
const form = await request.formData()
const signedRequest = form.get('signed_request')
if (typeof signedRequest !== 'string') {
return Response.json({ error: 'Bad request' }, { status: 400 })
}
const payload = parseSignedRequest(signedRequest)
if (!payload?.user_id) {
return Response.json({ error: 'Unauthorized' }, { status: 401 })
}
// درخواست را ثبت کنید، سپس بهصورت غیرهمزمان پاک کنید.
const confirmationCode = await enqueueDeletion(payload.user_id)
const statusUrl = new URL('/data-deletion', process.env.NEXT_PUBLIC_SITE_URL)
statusUrl.searchParams.set('code', confirmationCode)
return Response.json({
url: statusUrl.toString(),
confirmation_code: confirmationCode,
})
}گزارش وضعیت
نشانی بازگرداندهشده در پاسخ باید در دسترس بماند تا کاربر بتواند رخداد را تأیید کند. صفحهٔ وضعیت کد تأیید را میپذیرد و پیشرفت را گزارش میدهد.
- دریافتشده: درخواست ثبت و در صف قرار گرفته است.
- در حال انجام: پاکسازی در سیستمهای مربوط در جریان است.
- تکمیلشده: همهٔ دادههای در دامنه پاک شدهاند و تاریخ تکمیل نمایش داده میشود.
- نگهداریشده: رکوردهای مشخصی تحت یک تعهد قانونی نگه داشته میشوند و دلیل آن بیان میشود.
دامنهٔ حذف
- پاکشده
- توکنهای دسترسی ذخیرهشده، گفتوگوها و دیدگاههای همگامشده، رکوردهای مخاطب مشتقشده از داراییهای متا، و دادههای نمایهٔ ذخیرهشده در حافظهٔ میانی.
- نگهداریشده
- کمینهٔ رکوردهای لازم برای مقاصد قانونی، مالیاتی، امنیتی یا پیشگیری از تقلب، بههمراه ورودیهای حسابرسی که اثبات میکنند خود حذف انجام شده است.
- بیرون از دامنه
- دادههایی که متا نگه میدارد. کاربر باید از ابزارهای خود متا برای حذف محتوا از بسترهای متا استفاده کند؛ هما نمیتواند آن را به نمایندگی از او حذف کند.
نسخههای پشتیبان چرخهٔ نگهداری مخصوص خود را دارند. رکوردی که از سیستمهای زنده حذف شده است، هنگام پایان عمر آن نسخههای پشتیبان از آنها نیز پاک میشود، و نسخهٔ پشتیبان بازگردانیشده مجدداً در برابر درخواستهای حذف تکمیلشده پالایش میشود.
درخواستهای دستی
کاربرانی که ترجیح میدهند از جریان متا استفاده نکنند میتوانند درخواست را مستقیماً ارسال کنند. صفحهٔ راهنمای عمومی یک فرم ارائه میدهد و همان فرایند و گزارش وضعیت اعمال میشود.
- درخواستها با یک شمارهٔ پیگیری تأیید میشوند.
- در مواردی که درخواست توسط متا امضا نشده است، هویت پیش از پاکسازی بررسی میشود.
- نتیجه به نشانیای که درخواست را ارسال کرده است اطلاع داده میشود.