In het kader van de nieuwe cookiewet, heb ik de opdracht gekregen om een like-knop te maken die geen gebruik maakt van cookies, als de bezoeker niet op facebook is ingelogd. Dan zou-ie voldoen aan de cookiewet (disussie daarover wil ik hier nu niet voeren. het gaat nu even om de techniek). Ik gebruik daarvoor de API van FB via jQuery. Dit had ik eerst:
Er wordt geen cookie gezet. Dat gedeelte gaat dus goed, maar ik krijg een andere rare error:
Duidelijk een bug in FB dus, maarja, ga FB maar es wijsmaken dat ze aan het werk moeten. Het idee alleen al. Zoals je ziet, gebruik ik de "force" parameter in de call ook al, wat een veelgemaakte tip is. Maar dat is het probleem hier helemaal niet.
Elders had ik gevonden dat je een API key nodig hebt. Dat is goed en wel, maar die heb ik niet en kan ik ook niet aanvragen, en wel om drie redenen:
Vervolgens heb ik deze drie events nog geprobeerd:
Geen van drie wordt aangeroepen, maar geven ook geen errors of iets. Silent fail.
Okay, het komt er dus op neer dat die API niet echt mee wil werken. Eigenlijk wil ik alleen maar kijken of de bezoeker ingelogd is. Ik hoef geen naam of e-mail adres op te vissen, ik hoef geen facebook-api als die niet nodig is, ik hoef geen sessie-id, geen cookie-rommel, of andere privacy-informatie. Ik wil kort door de bocht eigenlijk alleen maar een "ja" of een "nee" ergens van terugkrijgen.
Maar hoe moet dat?
JavaScript:
1
2
3
4
5
6
7
| var script = $.getScript("//connect.facebook.net/en_US/all.js"); script.then(function() { FB.init({ cookie: false, logging: true, status: true, xfbml: false }); FB.getLoginStatus(function(response) { console.log("getLoginStatus", response); }, true); }); |
Er wordt geen cookie gezet. Dat gedeelte gaat dus goed, maar ik krijg een andere rare error:
Okay, de API werkt dus op zich wel, maar het doet iets dat niet klopt. getLoginStatus() staat duidelijk ná init(), of ben ik aan koffie toeFB.getLoginStatus() called before calling FB.init().
Duidelijk een bug in FB dus, maarja, ga FB maar es wijsmaken dat ze aan het werk moeten. Het idee alleen al. Zoals je ziet, gebruik ik de "force" parameter in de call ook al, wat een veelgemaakte tip is. Maar dat is het probleem hier helemaal niet.
Elders had ik gevonden dat je een API key nodig hebt. Dat is goed en wel, maar die heb ik niet en kan ik ook niet aanvragen, en wel om drie redenen:
- Facebook wil daarvoor eerst mijn mobiele nummer verifieren of mijn creditcard gebruiken. Geen van beide gaat gebeuren.
- Je schijnt een url op te moeten geven, en er is geen url. Dit is nml geen website, maar (wordt) een jQuery-plugin.
- Gebruikers (van mijn code) een API-key te laten opvragen is sowieso onzin, want voor de "gewone" like-knop hoeft dat allemaal ook niet - die ziet ook of een bezoeker ingelogd is.
Vervolgens heb ik deze drie events nog geprobeerd:
JavaScript:
1
2
3
4
5
6
7
8
9
| FB.Event.subscribe("auth.logout", function(response) { console.log("auth.logout", response); }); FB.Event.subscribe("auth.login", function(response) { console.log("auth.login", response); }); FB.Event.subscribe("auth.authResponseChange", function(response) { console.log("auth.authResponseChange", response); }); |
Geen van drie wordt aangeroepen, maar geven ook geen errors of iets. Silent fail.
Okay, het komt er dus op neer dat die API niet echt mee wil werken. Eigenlijk wil ik alleen maar kijken of de bezoeker ingelogd is. Ik hoef geen naam of e-mail adres op te vissen, ik hoef geen facebook-api als die niet nodig is, ik hoef geen sessie-id, geen cookie-rommel, of andere privacy-informatie. Ik wil kort door de bocht eigenlijk alleen maar een "ja" of een "nee" ergens van terugkrijgen.
Maar hoe moet dat?
日本!🎌