LightOpenID – pro Nette a PHP 7.4
- ForestCZE
- Člen | 209
Ahoj, hledám LightOpenID pro Nette a PHP 7.4. Jestli jsem to dobře pochopil, tak starší verze to měly v sobě. V té nové verzi, pokud dám:
$var = new \LightOpenID($host);
tak classa neexistuje. Na netu je dost těch knihoven, ale mají zastaralé funkce. Potřebuji na webu udělat logování přes Steam. Pokud někdo už vytvářel, budu vděčný. Díky.
- Marek Bartoš
- Nette Blogger | 1280
Dost o tom, že taková třída v Nette kdy byla pochybuju. Spíš jsi měl nainstalovanou nějakou knihovnu, která takto pojmenovanou třídu má, kupříkladu tuto https://github.com/…/LightOpenID
- ForestCZE
- Člen | 209
Mabar napsal(a):
Dost o tom, že taková třída v Nette kdy byla pochybuju. Spíš jsi měl nainstalovanou nějakou knihovnu, která takto pojmenovanou třídu má, kupříkladu tuto https://github.com/…/LightOpenID
Asi jsem se špatně vyjádřil. Myslel jsem, že byla přímo v PHP, ne v Nette.
Hned první věta: Lightweight PHP5 library for easy OpenID authentication. Tak nevím no…
Editoval ForestCZE (18. 3. 2020 19:32)
- David Matějka
- Moderator | 6445
o tom, ze byla primo v php dost pochybuju. a zkousel si nainstalovat ten odkazovany balicek?
- ForestCZE
- Člen | 209
David Matějka napsal(a):
o tom, ze byla primo v php dost pochybuju. a zkousel si nainstalovat ten odkazovany balicek?
Ano, zkoušel, ale vyhazuje mi to např.
get_magic_quotes_gpc() is deprecated
A dále, třeba toto. Nevidím, že by tam měl borec tu knihovnu a v tom kódu také vytváří instanci jako by to bylo součástí PHP.
- David Matějka
- Moderator | 6445
koukam, ze pro nektery distribuce existoval balicek, ktery tu tridu poskytoval (respektive nejakou starsi verzi nez ta, co je na githubu), ale soucasti php to nikdy nebylo
pokud to nefunguje, tak muzes zkusit projit forky, jestli neexistuje nejaky opraveny kod. nebo provest vlastni fork a zprovoznit to. urcite to oceni i dalsi lidi :)
- ForestCZE
- Člen | 209
Dal jsem to nějak dohromady.
Authentifikační metoda ve třídě Login:
public function auth()
{
$openID = new LightOpenID(self::HOST);
if(!$openID->mode)
{
bdump("mode is null");
$openID->identity = self::IDENTITY;
header("Location: " . $openID->authUrl());
}
elseif($openID->mode == "cancel")
{
bdump("mode is cancel");
$this->state = self::CANCEL;
$this->session["state"] = self::CANCEL;
return self::CANCEL;
}
else
{
bdump("validating...");
if($openID->validate())
{
$ide = $openID->data["openid_identity"];
$link = "http://steamcommunity.com/openid/id/";
$steamID = str_replace($link, "", $ide);
$this->state = self::SUCCESS;
$this->session["state"] = self::SUCCESS;
$this->user = $steamID;
return $steamID;
}
else
{
$this->state = self::FAILED;
$this->session["state"] = self::FAILED;
return self::FAILED;
}
}
}
public function isLogged()
{
if($this->state == null)
{
$this->state = $this->session["state"];
$this->user = $this->session["user"];
if($this->user)
return true;
else
return false;
}
else
{
if($this->state == self::SUCCESS)
return true;
else
return false;
}
}
Prsenter:
public function handleLogin()
{
$login = $this->login;
if($login->isLogged())
{
$this->flashMessage('Již jste přihlášen.');
$this->redirect('User:', $this->session->getSection('steam')->user);
}
else
{
$user = $login->auth();
if($user)
{
$this->flashMessage('Úspěšně přihlášen.');
$this->redirect('User:', $user);
}
elseif($user == $login::FAILED)
{
$this->flashMessage('Nejste přihlášen.');
$this->redirect('this');
}
elseif($user == $login::CANCEL)
{
$this->flashMessage('Přihlášení zrušeno.');
$this->redirect('this');
}
}
}
Latte:
<a href="{link login!}"><img src="http://steamcommunity-a.akamaihd.net/public/images/signinthroughsteam/sits_02.png" alt="SteamLogin"></a>
Problém je ten, že mode je vždycky
null
Dále mě pak překvapuje laděnka. Pokud kliknu na to tlačítko, přihlásím
se přes steam, vrátí mě to na stránku a dostanu tohle:
Nevím, jestli je dobře, že mě to redirectne dvakrát, ale asi ano, protože jednou mě to hodí na Steam Login a podruhé mě to musí vrátit. Když se podívám do té laděnky, tak mě zaráží, že tam jsou všechna ta data a pak už ne. Jako bych si to přepisoval někde. Dokazal by mi někdo prosím pomoct? Děkuji :)
Editoval ForestCZE (19. 3. 2020 20:28)
- David Matějka
- Moderator | 6445
prijde mi divny, ze v kodu
to saha na openid_mode, ale v tom requestu to mas oddeleny
teckou – openid.mode
ale vic ti asi neporadim, budes muset debuggovat sam
- ForestCZE
- Člen | 209
David Matějka napsal(a):
prijde mi divny, ze v kodu to saha na openid_mode, ale v tom requestu to mas oddeleny teckou –
openid.mode
ale vic ti asi neporadim, budes muset debuggovat sam
Tak nakonec jsem to celé překopal. Zjistil jsem, že ten mode ani validace
není potřeba. Po přihlášení to prostě všechna ta data hodí do
$_GET
. Vytáhnu si ID parsováním odkazu a toť vše.
Důležitá věc. V laděnce to píše ty tečky, ale ve skutečnosti tam je lomítko, takže pak už to byla hračka.
@DavidMatějka Moc děkuji za nakopnutí, bez tebe bych to celé nepředělal a nevydal se tím správným směrem. Vážím si věcných odpovědí, které člověka někam posunou :)