contributte/oauth2-client: po přihlášení přes Google je potřeba refresh stránky
- roman.campula
- Člen | 60
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;
}
- roman.campula
- Člen | 60
Ř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.