/** * 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())); } } }