jurchiks Posted April 6, 2014 Report Share Posted April 6, 2014 Uztaisīju bug report developers.facebook.com, aizvēra un uzdirsa, ka tur neesot pareizā vieta. Ieliku stackoverflow pēc fb deva "rekomendācijas", dabūju vienu komentāru un vairāk nekā. Nav vairs ideju, kur vēl prasīt palīdzību, tāpēc rakstu šeit. Šis ir oriģinālais stackoverflow jautājums: http://stackoverflow.com/questions/22863962/non-dev-user-always-has-id-0 Problēma ir ļoti jocīga un nekādīgi nevaru saprast, kas to izraisa un kāpēc tā vispār uzrodas tikai ne-developer lietotājiem. Varbūt, ka tā čaļa komentārs un mana atbilde arī virza uz atrisinājumu problēmai, ja tā, būtu labi, ja kāds varētu paturpināt domu. Link to comment Share on other sites More sharing options...
e-remit Posted April 6, 2014 Report Share Posted April 6, 2014 Ja nav user ID, ielādē vienkāršotu lapu un ar JS pieprasi autorizēt lietotāju, jo ir jāpieprasa tiesības atļaut aplikācijai saņemt usera datus. Lietotājs ieraudzīs FB tiesību pieprasīšanas logu, kuru apstiprinot, var pārlādēt lapu. Link to comment Share on other sites More sharing options...
jurchiks Posted April 6, 2014 Author Report Share Posted April 6, 2014 (edited) window.fbAsyncInit funkcija to arī dara - pieprasa autorizēt lietotāju, ja tas nav autorizējies. auth.authResponseChange events tiek izsaukts no FB.init(). Bet tas nestrādā. Edited April 6, 2014 by jurchiks Link to comment Share on other sites More sharing options...
zintis8789 Posted April 6, 2014 Report Share Posted April 6, 2014 Facebook app settingus paskaties, tur arī būs risinājums. Link to comment Share on other sites More sharing options...
Sasa Posted April 6, 2014 Report Share Posted April 6, 2014 (edited) Paskaties par signed_request kas tiek sūtīts līdzi appam. Vienā no saviem appiem kur jānolaiko lapa lai tiktu tālāk if($signed_request = parsePageSignedRequest()) { if($signed_request->page->liked) { } else { echo "non fan!"; } un citā savukārt līdzīgi: $signed_request = $facebook->getSignedRequest(); $like_status = $signed_request["page"]["liked"]; Izmanto PHP Facebook SDK https://www.facebook.com/gacholv/app_499135936800428 Edited April 6, 2014 by Sasa Link to comment Share on other sites More sharing options...
e-remit Posted April 6, 2014 Report Share Posted April 6, 2014 JS kodā pēc FB.init() izpildi FB.getLoginStatus(function(response){}); ..., kurā, pārbaudi response, un ja nav FB autorizācija, tad izpildi FB.login(function(r){}); ..., kurā lietotājs ir autorizēts aplikācijai, ja r.status === 'connected'. Ja nav, tātad pēc loga parādīšanas lietotājs nav atļāvis aplikācijai dot piekļuvi saviem datiem. Link to comment Share on other sites More sharing options...
foxsk8 Posted April 7, 2014 Report Share Posted April 7, 2014 Reāli situācija varētu arī būt tāda, ka aplikācija tikai strādās tam izveidotājam, ownerim, ja aplikācijas settingos paliek dev mode, respektīvi, tikai app devi, kas norādīti iekš app settingiem, admini var viņu lietot, no malas, citiem useriem viņa var vienkārši arī nestrādāt tik ilgi, kamēr tev viņa atradīsies sandboksā un nebūs palaista live modē. Kā pats iekš stack posta minēji, ka bosam viss iet un boss arī ir izveidojis šo aplikāciju. Link to comment Share on other sites More sharing options...
jurchiks Posted April 7, 2014 Author Report Share Posted April 7, 2014 (edited) Es arī minēju, ka nav nozīmes, vai app ir dev vai public mode, abos nestrādā. @zintis8789 - domā, neesmu skatījies? Tur vairs nav nekā tāda, ko es nebūtu redzējis. @Sasa - sākumā jau arī bija PHP, un tur arī nestrādāja. @e-remit - kāda atšķirība starp FB.getLoginStatus un FB.Event.subscribe('auth.authResponseChange', function(response))? Īsāk sakot, vai tajā stackoverflow iepostotajā pastebin kodā kaut kas iztrūkst, ja pieņem, ka tas ir viss lapas kods? Include tur ir tikai priekš Config::get(), to var arī hardkodēt. Edited April 7, 2014 by jurchiks Link to comment Share on other sites More sharing options...
Sasa Posted April 7, 2014 Report Share Posted April 7, 2014 @jurchiks paskaties šo https://developers.facebook.com/docs/reference/login/signed-request/ For certain types of apps, a signed request is passed to the app which contains some additional fields of information, even before Permissions have been requested. Link to comment Share on other sites More sharing options...
jurchiks Posted April 7, 2014 Author Report Share Posted April 7, 2014 Kura daļa no tās informācijas ir relevanta? No kurienes vispār tas signed_request nāk un kur to nolasīt? Link to comment Share on other sites More sharing options...
jurchiks Posted April 7, 2014 Author Report Share Posted April 7, 2014 (edited) @e-remit -- https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/#status Izskatās, ka atšķirības nav gan. @Sasa - ok, izskatās, ka tas signedRequest man jau nāk no authResponseChange response: http://stackoverflow.com/a/8302016/540394 Jautājums ir - priekš kam man tas ir vajadzīgs? Edited April 7, 2014 by jurchiks Link to comment Share on other sites More sharing options...
e-remit Posted April 7, 2014 Report Share Posted April 7, 2014 @e-remit - kāda atšķirība starp FB.getLoginStatus un FB.Event.subscribe('auth.authResponseChange', function(response))? Es tev vienkārši uzrakstīju veidu, kurš man nostrādāja līdzīgā situācijā. Atšķirība ir tajā, ka FB.getLoginStatus var izsaukt jebkurā brīdi, bet FB.Event.subscribe('auth.authResponseChange') nostrādā izmaiņu brīdī (vismaz pēc dokumentācijas). Pārbaudīji, vai tas vispār nostrādā? Vēl ir lasīts, ka dažiem rodas problēmas, ja testē uz 127.0.0.1, kas FB nepatīkot. Link to comment Share on other sites More sharing options...
jurchiks Posted April 7, 2014 Author Report Share Posted April 7, 2014 Netestēju lokāli, kods ir uz servera ar domēnu. Man viss strādā, esmu ielogojies aplikācijā un viss ir kārtībā, tiesa, man nekad nav prasīts ielogoties pašā aplikācijā, es vienkārši to atvēru un jau biju ielogojies. Tas pats ir ar facebook test useri, nekāds confirmation dialogs nelec ārā, automātiski jau esmu ielogots un visi dati nāk, kā vajag. Laikam jātaisa fake acc bez dev pieejas aplikācijai, jo citādi nevaru normāli debagot... Link to comment Share on other sites More sharing options...
Sasa Posted April 7, 2014 Report Share Posted April 7, 2014 SignedRequest tiek sūtīts no FB puses. Priekš kam tas vajadzīgs lai pirms lietotāju autorizēt paskatīties šādu tādu informāciju, varbūt pēc datu apskates var neprasīt autorizēt. Apskatīts kas ir iekš signed requesta šādi http://stackoverflow.com/questions/10893557/facebook-signed-request-get-uid-php Link to comment Share on other sites More sharing options...
jurchiks Posted April 7, 2014 Author Report Share Posted April 7, 2014 (edited) Ok, uztaisīju fake acc un redzu, ka auth.authResponseChange events netiek trigerots. Reāli feikam nekas pēc FB.init() nenotiek, kaut gan status: true un tam automātiski vajadzēja izsaukt auth.authResponseChange, bet dev kontam viss notiek un visi dati logojās. WTF? P.S. Obviously, app is public. Edited April 7, 2014 by jurchiks Link to comment Share on other sites More sharing options...
Recommended Posts