예제 #1
0
 /**
  * @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);
 }