/**
  * Successful login with Facebook.
  */
 public function onLoginWithFacebook()
 {
     $newUser = false;
     try {
         $accessToken = GraphAPI::instance()->getUserAccessToken(true);
         $response = GraphAPI::instance()->get('/me', ['id', 'email', 'name'], $accessToken);
         $facebookUser = $response->getGraphUser();
     } catch (SystemException $e) {
         Flash::error('Facebook login failed.');
         return;
     }
     $externalUser = UserExternalModel::facebook([$facebookUser->getId()])->first();
     if (!$externalUser) {
         // No user found by Facebook user id
         $user = UserModel::where('email', '=', $facebookUser->getEmail())->first();
         if (!$user) {
             // No user found by email either, sign up
             $newUser = true;
             $password = uniqid();
             $signup = ['username' => $facebookUser->getName(), 'name' => $facebookUser->getName(), 'email' => $facebookUser->getEmail(), 'password' => $password, 'password_confirmation' => $password];
             try {
                 $user = Auth::register($signup, true);
             } catch (ModelException $e) {
                 Log::error('Facebook sign up failed: ' . $e->getMessage());
                 $signup['username'] .= rand(1000, 9999);
                 try {
                     $user = Auth::register($signup, true);
                 } catch (ModelException $e) {
                     Log::error('Facebook sign up failed: ' . $e->getMessage());
                     Flash::error(Lang::get('klubitus.facebook::lang.register.register_failed'));
                     return;
                 }
             }
         }
         UserExternalModel::create(['user_id' => $user->id, 'provider' => UserExternalModel::PROVIDER_FACEBOOK, 'external_user_id' => $facebookUser->getId(), 'token' => $accessToken->getValue(), 'expires_at' => $accessToken->getExpiresAt()]);
     } else {
         $user = $externalUser->user;
     }
     Auth::login($user, true);
     if (post('redirect', true)) {
         if ($newUser) {
             return Redirect::to(post('redirect_signup', URL::previous() ?: Request::fullUrl()));
         } else {
             return Redirect::to(post('redirect_login', URL::previous() ?: Request::fullUrl()));
         }
     }
 }