Facebook PHP SDK Caching-gebruiker

Momenteel implementeer ik een site die zowel FB Connect als ons eigen systeem gebruikt om logins af te handelen. Zoals het op dit moment is ingesteld, wordt een gebruiker die eerder onze site bezocht en onze machtigingen heeft goedgekeurd, automatisch aangemeld wanneer ze de site opnieuw bezoeken. Als de gebruiker de uitlogknop aanraakt wanneer deze met FB is ingelogd op zijn account, worden deze ook uit FB afgemeld.

Op dit moment, als een gebruiker is ingelogd en op de uitgelogde knop drukt, logt hij ze FB boete in. De site gaat automatisch naar hen om een ​​nieuwe sessie te maken en een cheque wordt gebeld om te zien of de gebruiker nog steeds is ingelogd op FB met behulp van de PHP SDK getUser() functie. Het lijkt erop dat hoewel de gebruiker heeft uitgelogd, de SDK het gebruikers-ID in de cache opslaat en zegt dat ze toch zijn ingelogd ... vanuit de SDK. U kunt de oproep naar de cache hieronder bekijken. Is er hoe dan ook om dit zonder de FB SDK te wijzigen, of ben ik het probleem verkeerd aan het naderen?

if ($this->user !== null) {
 //we've already determined this and cached the value.
  return $this->user;
}

return $this->user = $this->getUserFromAvailableData();
2
Ik heb dit probleem ook gehad. Ik zal uitkijken naar een oplossing.
toegevoegd de auteur Ryan Speets, de bron

3 antwoord

Het heeft misschien iets te maken met uw applicatiestroom. De FB PHP SDK heeft me ook een zware tijd gekost.

Dit kan echter helpen:

Log the user out by redirecting them to the logoutUrl, this will then redirect back to your site. At this point you need to call $facebook->destroySession();

Bekijk wat die code doet (zoals getoond in regel 1092 van base_facebook.php ):

/**
 * Destroy the current session
 */
 public function destroySession() {
     $this->setAccessToken(null);
     $this->user = 0;
     $this->clearAllPersistentData();
 }

Hierna wist u uw sessies normaal en moet de gebruiker volledig worden uitgelogd en niet in de cache worden gezet.

In mijn code, wanneer ik de loginUrl en logoutUrl genereer, doe ik het volgende:

$fb_data = array(
     'loginUrl'  => $facebook->getLoginUrl(array('scope' => 'email,user_birthday')),
     'logoutUrl' => $facebook->getLogoutUrl(array('next' => base_url('index.php/authenticate/kill_session'))),
);

It's in the authenticate/kill_session method that I call $facebook->destroySession();

5
toegevoegd
@JimmyKane U begrijpt de bovenstaande code niet. Als u een betere oplossing heeft, kunt u een bijdrage leveren.
toegevoegd de auteur SeanNieuwoudt, de bron
En wat als de gebruiker is afgemeld bij FB via een andere site (of Facebook)? Deze oplossing is niet goed.
toegevoegd de auteur Jimmy Kane, de bron

Het probleem: wat als de gebruiker uitlogde via Facebook en niet met de link die je hebt opgegeven en die de sessiemoordenaar noemt.

U zult de sessie toch in de cache laten zetten, ook al is de gebruiker weg.

5
toegevoegd

U kunt een combinatie van JS AND PHP gebruiken om het probleem op te lossen dat gebruikers zich afmelden van de FACEBOOK-site.

Laad op uw pagina een JS getloginstatus (), en telkens wanneer de een niet overeenkomt met de andere (bijv. Facebook JS loginstatus! = Uw site-inlogstatus), forceert u een verversing (via JS) van uw pagina die de mismatch afhandelt.

Het ziet er misschien fout uit (de pagina wordt automatisch vernieuwd), maar het is OK voor mij.

0
toegevoegd