/** * Performs an authentication * @param array * @return Nette\Security\Identity * @throws Nette\Security\AuthenticationException */ public function authenticate(array $credentials) { $user = $this->users->where('email', $credentials['email'])->fetch(); if (!$user) { $data = array("username" => $credentials['username'], "email" => $credentials['email'], "name" => $credentials['first_name'], "surname" => $credentials['last_name'], "sex" => strtoupper((string) $credentials['gender'][0]), "facebook_id" => $credentials['id'], "role" => "member", "password" => hash("sha512", strftime('%a%b%y') . str_repeat('mooow', 10)), "generated_password" => 1, "active" => 1); $user = $this->users->insert($data); } else { if ($user->facebook_id !== $credentials['id']) { $this->users->update(array('facebook_id' => $credentials['id'])); } } $this->users->update(array('last_login' => new DibiDateTime(), 'last_ip' => $_SERVER['REMOTE_ADDR'])); return new NS\Identity($user->id, $user->role, $user->toArray()); }