Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Facebook Connect problem, facebook / php-sdk
indexx
post
Post #1





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 20.06.2008

Ostrzeżenie: (0%)
-----


Witam

Męczę się z pewnym problemem odnośnie logowania z konta facebook na stronie, dane pobieram, wszystko jest ok ale za żadne skarby nie mogę wywołać pozwoleń dot email, tzn pobieram tylko podstawowe dane, a potrzebuję jeszcze email

Normalne wywołanie to:
  1. $facebook->getLoginUrl();


a, żeby uzyskać pozwolenie powinien wyglądać tak:

  1. $facebook->getLoginUrl(array('perms'=> 'email'));



Link nie zmienia się, a powinno zostać doklejone &perms=email

Ale niestety nie działa, czy ktoś już korzystał z tego i może wie jak ten problem rozwiązać?

Ten post edytował indexx 25.03.2011, 12:25:40
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
#luq
post
Post #2





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Kod
'req_perms' => 'email'


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
gordon34
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 7.07.2009

Ostrzeżenie: (0%)
-----


kontynuje watek. a jak potem wyswietlic taki adres albo np zapisac go do bazy ?!

dodalem do swojego
  1. $facebook->getLoginUrl(array('req_perms'=> 'email'));


ale niestety teraz mi nie przechodzi przez logowanie. nic w sesje nie wlatuje. co radzicie ?
pozdrawiam
Go to the top of the page
+Quote Post
#luq
post
Post #4





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Zapisać do bazy? A po co? Nie widzę najmniejszego sensu.
Po prostu robisz coś takiego:

  1. $session = $facebook->getSession();
  2. if(!$session){
  3. $url = $facebook->getLoginUrl(array('req_perms'=> 'email'));
  4. echo "<script type='text/javascript'>top.location.href = '$url';</script>";
  5. exit();
  6. }
  7.  
  8. // a tutaj wchodzi tylko user który zaakceptował dostęp appa do swoich danych


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
melkorm
post
Post #5





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Do sessji chyba zawsze możesz się dobrać, dopiero jak
  1. $fb->api('/me');

Rzuci wyjątkiem (FacebookApiException) to albo nie ma sessji, albo nie zaakceptował uprawnień.


--------------------
Go to the top of the page
+Quote Post
#luq
post
Post #6





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Niee.

Sesja jest potrzebna do jakiejkolwiek operacji na graph api, tj popranie danych o userze, jego znajomych etc.
Sesje możemy pobrać (a właściwie to głównie o access_token chodzi) przez metodę getSession(), tak naprawdę nie musi być to zapisane w sesji, to gdzie to się zapiszę zależy od ustawień przeglądarki (tj. czy zaakceptuje ciacho z SIDem, jeśli nie to leci to GETem). Na stronie ustawionej jako główna strona appa w ustawieniach na fb możemy być pewni, że sesje dostaniemy, nie mam jej tylko w przypadku nie zaakceptowania uprawnień dostępowych wink.gif


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
melkorm
post
Post #7





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Zrobiłem szybki test:
1. Usunąłem się ze swojej aplikacji na FB.
Wynik:
Otrzymałem normalnie sessję, ponieważ jak sama dokumentacja PHP-SDK mówi:
Cytat
Logged in vs Logged out:
if ($facebook->getSession()) {
echo '<a href="' . $facebook->getLogoutUrl() . '">Logout</a>';
} else {
echo '<a href="' . $facebook->getLoginUrl() . '">Login</a>';
}

Manual

A zapytania do API można robić tylko gdy się wykona poprawnie to:
Cytat
To make API calls:
try {
$me = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
}


--------------------
Go to the top of the page
+Quote Post
#luq
post
Post #8





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Eee... spójrz TUTAJ
Cytat
If the user presses Allow (w sensie że w okienku z pytaniem o pozwolenia), your app is authorized. The OAuth Dialog will redirect (via HTTP 302) the user's browser to the URL you passed in the redirect_uri parameter with an authorization code:

(...)
Cytat
If your app is successfully authenticated and the authorization code from the user is valid, the authorization server will return the access token:


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
melkorm
post
Post #9





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Mówimy o różnych sposobach autoryzacji, ty mówisz o tokenach, a ja permanentnej akceptacji aplikacji - wtedy żadnych tokenów nie trzeba.

Ja tylko udowodniłem że sama sesja pozwala tylko stwierdzić czy użytkownik jest zalogowany na FB czy nie, a nie ma w niej żadnych informacji o tym iż zaakceptował naszą aplikację.


--------------------
Go to the top of the page
+Quote Post
yevaud
post
Post #10





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(melkorm @ 29.03.2011, 00:57:11 ) *
Mówimy o różnych sposobach autoryzacji, ty mówisz o tokenach, a ja permanentnej akceptacji aplikacji - wtedy żadnych tokenów nie trzeba.

zawsze potrzebny jest token. Mozesz sie autentykowac jako aplikacja, ale wtedy masz token aplikacji. Nawet jesli user dal Ci uprawnienia offline, to dalej o ile sprawdzałem potrzebujesz jego tokenu - musisz go gdzies zapamietac.
Nie ma czegos takiego jak "permanentna akceptacja aplikacji", zawsze akceptujesz aplikacje na pewnych konkretnych warunkach ktore okreslone sa przez uprawnienia. Jesli user zaakceptuje prosbe o nadanie uprawnien dla aplikacji, wtedy aplikacja otrzymuje token. Jesli token sie przedawni, wtedy aplikacja nie ma juz dostepu do danych ktore udostepnial jej token. Nastepnym razem gdy user wejdzie i sie "zaloguje" (czyli utworzy i przekaze token), nie bedzie musial ponownie zgadzac sie na nadanie uprawnien, nawet do tego stopnia ze zostanie "samoczynnie zalogowany" czyli logowanie/przekazanietokenu przebiegnie bez zadnej interakcji z uzytkownikiem.

Cytat
Zapisać do bazy? A po co? Nie widzę najmniejszego sensu.

po to zeby wyslac userowi email, nawet jesli nie uzywa akurat aplikacji. Po to miedzy innymi sa te smieszne hashowane adresy email ktore leca przez facebook.com(z tego co pamietam zapisywanie innych w Twojej bazie jest niezgodne z regulaminem, ale i tak wszyscy to robia).

Cytat
Sesje możemy pobrać (a właściwie to głównie o access_token chodzi) przez metodę getSession()

sesja to nie do konca jest access token. Access token pobierasz za pomoca getAccessToken smile.gif


btw. co ten temat robi w dziale AJAX ?

Ten post edytował yevaud 29.03.2011, 00:38:57
Go to the top of the page
+Quote Post
#luq
post
Post #11





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Dlaczego mi dziś nikt nie wierzy sad.gif

http://apps.facebook.com/luq-foo

Kod:
  1. <?php
  2. require_once './facebook.php';
  3.  
  4. $facebook = new Facebook(array(
  5. 'appId' => 'xxx',
  6. 'secret' => 'xxx',
  7. 'cookie' => true,
  8. 'xfbml' => true,
  9. ));
  10.  
  11. $session = $facebook->getSession();
  12. echo '<pre>';
  13. print_r( $session );
  14. echo '</pre>';
  15. if(!$session){
  16. $url = $facebook->getLoginUrl(array(
  17. 'canvas' => 1,
  18. 'fbconnect' => 0,
  19. 'req_perms' => 'email'
  20. ));
  21. echo "<script type='text/javascript'>top.location.href = '$url';</script>";
  22. exit();
  23. }
  24. else{
  25. echo '<pre>';
  26. print_r($facebook->api('/me'));
  27. echo '</pre>';
  28. }
  29. ?>


Po prostu jak masz sesje dla aplikacji i tą aplikację usuniesz z "Aplikacje, z których korzystasz" to dalej masz przydzieloną sesję do niej bo jest ona przydzielana na określony czas...

@up
Cytat
Cytat
Cytat
Zapisać do bazy? A po co? Nie widzę najmniejszego sensu.


po to zeby wyslac userowi email, nawet jesli nie uzywa akurat aplikacji. Po to miedzy innymi sa te smieszne hashowane adresy email ktore leca przez facebook.com(z tego co pamietam zapisywanie innych w Twojej bazie jest niezgodne z regulaminem, ale i tak wszyscy to robia).

Ale to co zwróci getLoginUrl()?

Cytat
Cytat
Sesje możemy pobrać (a właściwie to głównie o access_token chodzi) przez metodę getSession()

sesja to nie do konca jest access token. Access token pobierasz za pomoca getAccessToken smile.gif

Aj tam czepiasz się słówek ;P Oczywiście chodziło mi o to że sesja jest złożona z access_token
  1. /**
  2.   * Gets a OAuth access token.
  3.   *
  4.   * @return String the access token
  5.   */
  6. public function getAccessToken() {
  7. $session = $this->getSession();
  8. // either user session signed, or app signed
  9. if ($session) {
  10. return $session['access_token'];
  11. } else {
  12. return $this->getAppId() .'|'. $this->getApiSecret();
  13. }
  14. }


Ten post edytował #luq 29.03.2011, 01:00:33


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
yevaud
post
Post #12





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(#luq @ 29.03.2011, 01:53:43 ) *
Dlaczego mi dziś nikt nie wierzy sad.gif
Po prostu jak masz sesje dla aplikacji i tą aplikację usuniesz z "Aplikacje, z których korzystasz" to dalej masz przydzieloną sesję do niej bo jest ona przydzielana na określony czas...

smile.gif Sesja to nie token. Sesje masz tak dlugo jak dlugo uzytkownik jest zalogowany na facebooku i/lub ma wlaczone ciastka, nie znaczy to wcale ze aplikacja ma token.
Jesli odbierzesz uprawnienia z aplikacji, wtedy token pochodzi jeszcze chwile bo facebook propaguje zmiany, ale po chwili przestaje dzialac, a poniewaz dalej bedziesz go wysylal to facebook go odrzuci i dostaniesz krzaki

btw. dostep do czesci /me jest publiczny, token golej aplikacji wystarcza w pelni. Aby zadzialalo /me wystarczy nieautoryzowana sesja na tokenie zautentykowanej aplikacji

konczac temat sesji/tokenu: Facebookowa sesja moze zawierac token, ale nie musi. Sesja oznacza ze user jest zalogowany w facebooku, dostajesz wtedy w sesji jego uid. W momencie gdy user dodatkowo da uprawnienia dla aplikacji i przekaze jej token, wtedy token dopisywany jest do sesji, ale token nie jest sesja, sesja moze go opcjonalnie zawierac. Jesli nie ma sesji, to znaczy ze wszedl user ktory nie zalogowal sie na facebooku(moze nawet nie ma tam konta)

Ten post edytował yevaud 29.03.2011, 01:08:35
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 20:33