contributte/oauth2-client: po přihlášení přes Google je potřeba refresh stránky

roman.campula
Člen | 60
+
0
-

Zdravím vás,
chtěl bych probrat problém s přihlášením pomocí kombinace contributte/oauth2-client a league/oauth2-google. Po kliknutí na tlačítko typu „přihlásit se pomocí Google“ se skutečně přihlásím, ale jsem přesměrován na úvodní stránku webu, kde vidím, že přihlášen nejsem. Informaci o tom, že jsem přihlášen, vidím až poté, co udělám refresh stránky nebo kliknu na libovolný odkaz. Ono první kliknutí na tlačítko mne tedy přihlásí, ale nějak se asi nenaplní ta identita uživatele a spraví se to až s přechodem na další stránku.

Používám i přihlašování přes Facebook, kde je v kódu webu podstatě vše stejné – a tam to funguje bez problémů. Nevíte, kde by mohl být problém? Přidávám výtah z kódu, ale nevím, zda je potřeba – tak jen pro informaci.

Díky moc za nasměrování.

LoginPresenter.php

function actionLoginGoogle() {
    $this->googleFlow->getProvider()->setRedirectUri($this->presenter->link("//:App:Login:loginGoogleAuthorize"));
    $this->redirectUrl($this->googleFlow->getAuthorizationUrl());
  }

function actionLoginGoogleAuthorize() {
    try {
      // ziskani informaci o uzivateli
      $this->googleFlow->getProvider()->setRedirectUri($this->presenter->link("//:App:Login:loginGoogleAuthorize"));
      $accessToken = $this->googleFlow->getAccessToken($this->getHttpRequest()->getQuery());
      $owner = $this->googleFlow->getProvider()->getResourceOwner($accessToken);
      $user = Nette\Utils\ArrayHash::from($owner->toArray());

      // prihlaseni do aplikace
      $result = $this->authenticatorGoogle->login($user->email);
      if ($result) { // uzivatel s Google e-mailem nalezen
        $this->flashMessage($this->translator->translate("app.login.flashMessage.loginSuccess"), "success");
        $redirectLink = $this->link(":Web:Homepage:default");
      }
      else { // uzivatel s Google e-mailem nenalezen
        (...)
      }
    } catch (\Throwable $e) {
        (...)
    } finally {
      if (isset($redirectLink)) {
        $this->redirectUrl($redirectLink);
      }
    }
  }

authenticatorGoogle.php

function login(string $email): bool {
    $row = $this->database->table("users")
                          ->where("emailGoogle", $email)
                          ->fetch();

    if (!$row) {
      return false;
    }

    $identity = new Nette\Security\SimpleIdentity($row->id, $row->id, $row);
    $this->user->login($identity);

    return true;
  }
Felix
Nette Core | 1186
+
0
-

Ahoj, opravdu se vykona kod s prihlasenim a nasledny redirect/refresh? Vypada to, jakoby jsi totiz neudelal redirect a stranka zustala tam, kam jsi prisel z googlu.

roman.campula
Člen | 60
+
0
-

Řekl bych, že ano. Mám tam stránky jako Úvod, Záliby, Články apod. Místo na Úvod jsem schopen přesměrovat třeba na Záliby (bez změny u Google) přepsáním :Web:Homepage:default na :Web:Hobbies:default, takže přesměrování se provede. Ovšem opět bez indikace přihlášeného uživatele někde v zápatí stránky. Až když kliknu na jinou stránku (třeba na Články), až pak vidím, že jsem přihlášen.