/** * Lấy data của người dùng facebook dựa vào longlive access token * * @param $longLiveAccessToken * * @return \Illuminate\Database\Eloquent\Model */ public function getSocialUserByLongLivedAccessToken($longLiveAccessToken) { // set access token to work with API $this->laravelSocialSdk->setDefaultAccessToken($longLiveAccessToken); // Set endpoint API $response = $this->laravelSocialSdk->get('/me?fields=id,name,last_name,first_name,email'); // get data from API $facebookUserData = $response->getGraphUser(); // update social data from api to database $facebookUser = $this->socialUser->createOrUpdateGraphNode($facebookUserData); // update long-lived access token $facebookUser->setAttribute('access_token', $longLiveAccessToken)->save(); return $facebookUser; }
/** * @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(); }