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
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
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.