Part of #1.
Blocked by: #4 (Spike: Meta as OAuth2 plus Graph profile, and the data deletion callback); #8 (Sessions: issuing, validation, sliding expiry, revocation and logout); Account linking: one user, many identities, and the email-match rules
Problem. Facebook Login is plain OAuth2 with a profile call, implemented on the oauth2 crate as the spike decided.
Proposed approach.
GET /meta/start: authorization URL with email public_profile, state in the signed cookie, redirect.
GET /meta/callback: state check, code exchange through the HttpClient port, then GET /me?fields=id,name,email; email may be missing and is treated as unverified when present unless Meta documents otherwise.
- Identity
(provider = meta, subject = Graph id, email?, name) handed to the linking rules; session issued.
- App-scoped user ids are per app; the subject is stored as returned and documented as not portable across Meta apps.
Acceptance criteria
Part of #1.
Blocked by: #4 (Spike: Meta as OAuth2 plus Graph profile, and the data deletion callback); #8 (Sessions: issuing, validation, sliding expiry, revocation and logout); Account linking: one user, many identities, and the email-match rules
Problem. Facebook Login is plain OAuth2 with a profile call, implemented on the
oauth2crate as the spike decided.Proposed approach.
GET /meta/start: authorization URL withemail public_profile, state in the signed cookie, redirect.GET /meta/callback: state check, code exchange through theHttpClientport, thenGET /me?fields=id,name,email; email may be missing and is treated as unverified when present unless Meta documents otherwise.(provider = meta, subject = Graph id, email?, name)handed to the linking rules; session issued.Acceptance criteria
HttpClientfor the token and profile calls, with and without an email