Jump to content
php.lv forumi

FB aplikācija - user ID vienmēr 0


jurchiks

Recommended Posts

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

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

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 by jurchiks
Link to comment
Share on other sites

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 by Sasa
Link to comment
Share on other sites

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

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

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 by jurchiks
Link to comment
Share on other sites

@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 by jurchiks
Link to comment
Share on other sites

@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

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

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 by jurchiks
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...