Exemplo n.º 1
0
 /**
  * Callback to log in users from Facebook. Be warned; it's messy.
  */
 public function authenticateFromJavascript(Request $request, LaravelFacebookSdk\LaravelFacebookSdk $fb)
 {
     // Try to grab the Facebook API token that the SDK should give us
     try {
         $token = $fb->getJavaScriptHelper()->getAccessToken();
     } catch (Facebook\Exceptions\FacebookSDKException $e) {
         // Failed to obtain access token; error out
         return Redirect::to('/login')->withErrors([$e->getMessage()]);
     }
     if (!$token) {
         // If the token is falsy... uhh, what the hell
         return Redirect::to('/login')->withErrors(["You haven't logged into Facebook correctly."]);
     }
     if (!$token->isLongLived()) {
         // OAuth 2.0 client handler. This is... a thing.
         $oauth_client = $fb->getOAuth2Client();
         // Extend the access token.
         try {
             $token = $oauth_client->getLongLivedAccessToken($token);
         } catch (Facebook\Exceptions\FacebookSDKException $e) {
             return Redirect::to('/login')->withErrors([$e->getMessage()]);
         }
     }
     // Keep the User Access Token in Session storage, so we can use it for this request
     $data = $request->all();
     Session::put('fb_user_access_token', (string) $token);
     if (isset($data["from"])) {
         Session::put('fb_logged_in_from', (string) $data["from"]);
     }
     // Use the user's access token by default for this request
     $fb->setDefaultAccessToken($token);
     try {
         // Request Facebook user data
         $response = $fb->get('/me?fields=id,name,email,location,bio,picture.width(800).height(800)');
     } catch (Facebook\Exceptions\FacebookSDKException $e) {
         return Redirect::back()->withErrors([$e->getMessage()]);
     }
     // get a Graph User object
     $facebook_user = $response->getGraphUser();
     try {
         $user = User::where('facebook_id', $facebook_user["id"])->firstOrFail();
     } catch (ModelNotFoundException $e) {
         $facebook_user["username"] = $facebook_user["id"];
         $user = User::createOrUpdateGraphNode($facebook_user);
     }
     // Use the Graph User to create a Laravel User with their data
     Auth::login($user);
     if (!$user->username) {
         $user->username = $user->facebook_id;
         $user->save();
         return Redirect::to('/user/editProfile')->with('message', 'Almost set up! Please fill out your profile...');
     }
     // Log the user into Laravel
     return Redirect::back();
 }
Exemplo n.º 2
0
 /**
  * @return mixed
  */
 public function postLogin()
 {
     /*
      * Login Facebook
      * Người dùng login bằng javascriptSDK sau đó sẽ gửi short token-key lên server.
      * Server sẽ dùng short token-key này để lấy long-lived token-key
      * Tiếp tục dùng long-lived token key để lấy thông tin của người dùng: id-facebook + email + name....
      * Kiểm tra người dùng trên hệ thống. Lưu ý đây là người dùng facebook. Sẽ link sang user-sentinel bằng user_id.
      * Nếu người dùng chưa tồn tại trên hệ thống thì sẽ tạo 1 user mới để đăng nhập. User này do sentinel quản lý. Email/pass word do mình tự generate ra.
      * Nếu người dùng tồn tại trên hệ thống rồi => lấy user-sentinel => login-sentinel
      */
     try {
         $token = $this->laravelFacebookSdk->getJavaScriptHelper()->getAccessToken();
         if (!$token) {
             // User hasn't logged in using the JS SDK yet
             $this->setErrorData('not_authorized');
         } else {
             // Get long-lived access token
             $longLiveAccessToken = $this->facebookHelper->extendToken($token);
             // Use long-lived access token above to get UserData
             $facebookUser = $this->facebookHelper->getSocialUserByLongLivedAccessToken($longLiveAccessToken);
             // Check current facebook user existed in user database
             $userSentinel = $this->facebookUser->isFacebookUserExisted($facebookUser);
             if (!$userSentinel) {
                 $credentials = $facebookUser->toArray();
                 $credentials['password'] = md5(microtime());
                 /** @var \Modules\IzCustomer\Entities\User $userSentinel */
                 $userSentinel = $this->sentinel->registerAndActivate($credentials);
                 // update relationship
                 $userSentinel->facebook()->save($facebookUser);
             }
             // Login and remember to sentinel
             $this->sentinel->loginAndRemember($userSentinel);
             // set output
             $this->setResponseData($userSentinel->toArray());
         }
     } catch (FacebookSDKException $e) {
         $this->setResponseCode(400);
         $this->setErrorData($e->getMessage());
     }
     return $this->responseJson();
 }
Exemplo n.º 3
0
 public function loginFacebookJs(\SammyK\LaravelFacebookSdk\LaravelFacebookSdk $fb)
 {
     try {
         $token = $fb->getJavaScriptHelper()->getAccessToken();
     } catch (Facebook\Exceptions\FacebookSDKException $e) {
         // Failed to obtain access token
         dd($e->getMessage());
     }
     // $token will be null if no cookie was set or no OAuth data
     // was found in the cookie's signed request data
     if (!$token) {
         // Get the redirect helper
         $helper = $fb->getRedirectLoginHelper();
         if (!$helper->getError()) {
             abort(403, 'Unauthorized action.');
         }
         // User denied the request
         dd($helper->getError(), $helper->getErrorCode(), $helper->getErrorReason(), $helper->getErrorDescription());
     }
     if (!$token->isLongLived()) {
         // OAuth 2.0 client handler
         $oauth_client = $fb->getOAuth2Client();
         // Extend the access token.
         try {
             $token = $oauth_client->getLongLivedAccessToken($token);
         } catch (Facebook\Exceptions\FacebookSDKException $e) {
             dd($e->getMessage());
         }
     }
     $fb->setDefaultAccessToken($token);
     // Get basic info on the user from Facebook.
     try {
         $response = $fb->get('/me?fields=id,name,email,picture{url}');
     } catch (Facebook\Exceptions\FacebookSDKException $e) {
         dd($e->getMessage());
     }
     // Convert the response to a `Facebook/GraphNodes/GraphUser` collection
     $facebook_user = $response->getGraphUser();
     // Create the user if it does not exist or update the existing entry.
     // This will only work if you've added the SyncableGraphNodeTrait to your User model.
     $user = User::createOrUpdateGraphNode($facebook_user);
 }