Serialization of ‚Closure‘ is not allowed při přihlášení

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

Snažím se zprovoznit facebook login společně s nextras/orm a dostávám error Serialization of 'Closure' is not allowed a nevím si vůbec rady co to způsobuje natož jak to vyřešit.

SignPresenter:

class SignPresenter extends BasePresenter {

    /** @var \Kdyby\Facebook\Facebook */
    private $facebook;

    /** @var UsersModel */
    private $usersModel;
    public function __construct(\Kdyby\Facebook\Facebook $facebook, Orm $usersModel)
    {
        parent::__construct();
        $this->facebook = $facebook;
        $this->usersModel = $usersModel->users;
    }
    /** @return \Kdyby\Facebook\Dialog\LoginDialog */
    protected function createComponentFbLogin()
    {
        $dialog = $this->facebook->createDialog('login');
        /** @var \Kdyby\Facebook\Dialog\LoginDialog $dialog */
        $dialog->onResponse[] = function (\Kdyby\Facebook\Dialog\LoginDialog $dialog) {
            $fb = $dialog->getFacebook();

            if (!$fb->getUser()) {
                $this->flashMessage("Sorry bro, facebook authentication failed.");
                return;
            }
            try {
                $me = $fb->api('/me');

                if (!$existing = $this->usersModel->findByFacebookId($fb->getUser())) {
                    $existing = $this->usersModel->registerFromFacebook($fb->getUser(), $me);
                }
                $this->usersModel->updateFacebookAccessToken($fb->getUser(), $fb->getAccessToken());

                $this->user->login(new \Nette\Security\Identity($existing->id, $existing->roles, $existing));

            } catch (\Kdyby\Facebook\FacebookApiException $e) {
                \Tracy\Debugger::log($e, 'facebook');
                $this->flashMessage("Sorry bro, facebook authentication failed hard.");
            }
        };

        return $dialog;
    }

}

UsersRepository:

class UsersRepository extends Repository{
    public function findByFacebookId($user){
        return $this->getBy(['fbId' => $user]);
    }
    public function updateFacebookAccessToken($user, $token){
        $currentUser = $this->getBy(['fbId' => $user]);
        $currentUser->fbAccessToken = $token;
        $this->persistAndFlush($currentUser);
    }
}

Tváří se to jakože přihlášení proběhlo vpořádku, ale spadne to tady:

Editoval wassy (28. 3. 2015 21:45)

Aurielle
Člen | 1281
+
+1
-

Snažíš se ukládat do identity něco, co tam uložit nejde (výsledek toho, co ti vrátí tvůj usersModel). Zkus na to kouknout, pravděpodobně rychle zjistíš, co ti tam dělá nepořádek. Ideálně jako třetí parametr identitě předávej jen pole nebo hloupý objekt, tam se nemůže nic pokazit.

wassy
Člen | 46
+
0
-

Už jsem na to pak přišel no, tam se předává celá ta entita i s relacema a vším, k čemu je ten třetí parametr? Je nutný pro chod aplikace? Vystavuju se nějakému riziku když to budu logovat bez něj? :)

Aurielle
Člen | 1281
+
0
-

Třetí parametr znamená další data, která chceš identitě předat a která pak můžeš potřebovat, viz API.