Při authentikaci nefunguje cashování do souboru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
t0x1c
Člen | 151
+
0
-

Zdravím mám takový problem. Mám přihlášeni přes službu steam pomoci openid. Authenticator jsem si upravil tak aby to nějak šlo. Ale když se člověk přihlásí potřebuju načtení podle jeho id informaci z jednoho api a to je pomalé. Proto to chci udělat jen jednou když se přihlásí a udělat chache do souboru. Ale prostě za boha to nechce jit. Když to dám napč do nějakeho presenteru na action default tak to jde ale v tom authenticatoru to nejde. Zde je kod

public function authenticate(array $credentials) {
    $storage = new Nette\Caching\Storages\FileStorage(WWW_DIR . '/../temp');
    $this->cache = new Cache($storage);
    list($steamId64) = $credentials;
    return new Nette\Security\Identity($steamId64, '', array('steamid64' => $steamId64));
    $this->profil = json_decode(file_get_contents('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=B554331187B4FDB8E9BE6428A686F321&steamids=' . $steamId64));
    $this->cache->save($steamId64, $this->profil);
}
ViPEr*CZ*
Člen | 818
+
0
-

??? Za klíčové slovo return se to nikdy nedostane!!!

Editoval ViPEr*CZ* (29. 9. 2013 11:19)

enumag
Člen | 2118
+
0
-

Nebylo by lepší ukládat to v Identity? Nette ji cachuje.

t0x1c
Člen | 151
+
0
-

ViPErCZ napsal(a):

??? Za klíčové slovo return se to nikdy nedostane!!!

Sorry to jsem zrovna koušel samozřejmě to nejde ani před return.

A do identity jsem nezkoušel. Můžu tam oložit přímo celou stdClass? To api vrací toto http://api.steampowered.com/…aries/v0002/?…

Editoval t0x1c (29. 9. 2013 11:30)

enumag
Člen | 2118
+
0
-

Ano, můžeš.

t0x1c
Člen | 151
+
0
-

Tak jsem dal teda toto

public function authenticate(array $credentials) {
    list($steamId64) = $credentials;
    $profil = json_decode(file_get_contents('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=B554331187B4FDB8E9BE6428A686F321&steamids=' . $steamId64));
    return new Nette\Security\Identity($steamId64, '', array('steamid64' => $steamId64, 'steamprofil' => $profil));
}

A ukláda se NULL. Jakoby vubec nefungovalo v tom authenticatoru file_get_contents

enumag
Člen | 2118
+
0
-

Zkus Nette\Utils\Json::decode().

Editoval enumag (29. 9. 2013 12:37)

t0x1c
Člen | 151
+
0
-

To mi vyhodí chybu Syntax error, malformed JSON

enumag
Člen | 2118
+
0
-

Nevrací ten file_get_contents náhodou FALSE? Máš zapnutou direktivu na otvírání vzdálených souborů? Pokud to vrací normálně string tak to asi není validní JSON což by byl bug steamu.

t0x1c
Člen | 151
+
0
-

To nevím ale jak jsem psal mám presenter TestPresenter a tam to normalně jde ale v souboru Athenticator.php to nejde.

t0x1c
Člen | 151
+
0
-

Fakt si s tim nevím rady přiložím vše.

Toto mam v basepresenteru je to to openid prihlášení

public function actionDefault() {

        //Přihlášení přes steam pomoci OPENID
        $api = '-------';

        try {
            # Change 'localhost' to your domain name.
            $OpenID = new LightOpenID('----');
            if (!$OpenID->mode) {

                if (isset($_GET['login'])) {
                    $OpenID->identity = "http://steamcommunity.com/openid";
                    header("Location: {$OpenID->authUrl()}");
                }

                if (!isset($_SESSION['T2SteamAuth'])) {
                    $this->login = "<div id=\"login\">Welcome Guest. Please <a href=\"?login\"><img src=\"http://cdn.steamcommunity.com/public/images/signinthroughsteam/sits_small.png\" /></a> to *Website Action*.</div>";
                }
            } elseif ($OpenID->mode == "cancel") {
                echo "User has canceled Authenticiation.";
            } else {

                if (!isset($_SESSION['T2SteamAuth'])) {
                    $_SESSION['T2SteamAuth'] = $OpenID->validate() ? $OpenID->identity : null;
                    $_SESSION['T2SteamID64'] = str_replace("http://steamcommunity.com/openid/id/", "", $_SESSION['T2SteamAuth']);
                    $this->steam64 = $_SESSION['T2SteamID64'];
//Zde mi ten json_decode taky nešel
                    //Přihlášení
                    $this->user->login($this->steam64);
                    $this->user->setExpiration(FALSE);
                    $this->redirect('this');
                }
            }
        } catch (ErrorException $e) {

            echo $e->getMessage();
        }

A v authenticaotur potom jen toto

public function authenticate(array $credentials) {
       list($steamId64) = $credentials;
       $profil = json_decode(file_get_contents('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=B554331187B4FDB8E9BE6428A686F321&steamids=76561197987636337'));
       return new Nette\Security\Identity($steamId64, '', array('steamid64' => $steamId64, 'steamprofil' => $profil));
   }
enumag
Člen | 2118
+
0
-

t0×1c napsal(a):

To nevím …

A to je tak těžký si tam hodit dump??? Že sem dáš kompletní zdroják ničemu nepomůže, prostě nastal nějaký speciální případ že se ten JSON ze steamu nepodařilo načíst a ty to nemáš ošetřené, toť vše. Tohle si musíš vyřešit sám. A nic složitýho to není. Za čas který mi trvá napsat tenhle příspěvek bych to měl pravděpodobně už vyřešené.

Editoval enumag (29. 9. 2013 16:43)

t0x1c
Člen | 151
+
0
-

Jo ale jsem začátečník a nemám s tim takove zkušenosti jako ty.. :(

t0x1c
Člen | 151
+
0
-

Vyřešeno lock