/** * @param Request $request * @return \Illuminate\Http\RedirectResponse * */ public function getLoginFacebook(Request $request) { $fb = $this->fbInit(); $helper = $fb->getRedirectLoginHelper(); //validate if accept the app if ($helper->getError()) { $request->session()->flash('error', 'reject_app'); return redirect()->route('signup'); } try { $token = $helper->getAccessToken(); $response = $fb->get('/me?fields=id,name,first_name,last_name,email', $token); } catch (FacebookResponseException $e) { $request->session()->flash('error', 'reject_app'); return redirect()->route('signup'); } catch (FacebookSDKException $e) { $request->session()->flash('error', 'reject_app'); return redirect()->route('signup'); } $fbResponse = $response->getGraphUser(); $data = ['facebook_id' => $fbResponse['id'], 'firstname' => isset($fbResponse['first_name']) ? $fbResponse['first_name'] : null, 'lastname' => isset($fbResponse['last_name']) ? $fbResponse['last_name'] : null, 'email' => isset($fbResponse['email']) ? $fbResponse['email'] : null]; //find by Id Facebook, if found then login that user if ($result = User::findByFacebookId($fbResponse['id'])) { Auth::loginUsingId($result->getAuthIdentifier()); return redirect()->intended('/profile/' . $result->username); } //find by email, if found then login that user if ($data['email'] && ($result = User::findBy(['email' => $data['email']]))) { $result->facebook_id = $data['id']; Auth::loginUsingId($result->getAuthIdentifier()); return redirect()->intended('/profile/' . $result->username); } //if the user is new then a new user is created and logged in $user = new User(); $user->fill($data); if (!$user->save()) { new \Exception('No se pudo crear la cuenta'); } Auth::login($user); return redirect()->intended('/profile/' . $result->username); }