public function facebookLogin(Request $request) { $fb = new Facebook(); // если код не предоставлен if (Input::get('code') === null) { return Redirect::to('http://what-it-means.ru/#/site/auth/facebook/error/rejected-by-user'); } // если код предоставлен, но он не верен (кто то вмешался по середине) $authResult = $fb->auth(Input::get('code')); if (!$authResult) { return Redirect::to('http://what-it-means.ru/#/site/auth/facebook/error/auth-error'); } // если все в порядке, выполним нужные нам действия (авторизация, регистрация) $fbUserData = $fb->api('/me'); // нужно ли зарегистрировать пользователя или авторизовать? if (isset($fbUserData->email)) { $user = User::findByEmail($fbUserData->email); if (!$user) { $user = User::create(array('name' => $fbUserData->name, 'email' => $fbUserData->email, 'password' => md5(Func::hash(8)))); } Auth::login($user, true); return Redirect::to('http://what-it-means.ru/#/site/auth/facebook/success/'); } //echo var_dump($fbUserData); // нужно ли только авторизовать пользователя даже если емейл не предоставлен? $userSocGlueData = UserSocGlue::where(['provider' => 'facebook', 'provider_user_id' => $fbUserData->id])->first(); if ($userSocGlueData) { Auth::login(User::find($userSocGlueData->user_id), true); return Redirect::to('http://what-it-means.ru/#/site/auth/facebook/success/'); } // если не хватает данных о юзере и он не зарегистрирован if (!isset($fbUserData->email)) { return Redirect::to('http://what-it-means.ru/#/site/auth/facebook/error/no-email'); } }
public function register(Request $request) { $fb = new Facebook(); // валидация $paramsToValidate = array('email' => $request->email, 'password' => $request->password, 'provider' => $request->provider); $validatorRules = array('email' => ['required', 'email'], 'password' => ['required', 'min:3'], 'provider' => ['string']); $validator = Validator::make($paramsToValidate, $validatorRules); if ($validator->fails()) { return $this->response->validatorError($validator->messages()); } // проверим не занят ли емейл $user = User::findByEmail($request->email); if ($user) { return $this->response->onError('Email is already belongs to some of our users'); } // зарегистрируем и авторизуем пользователя $user = User::create(array('name' => '', 'email' => $request->email, 'password' => md5($request->password))); Auth::login($user, true); // если юзер зарегался через соц сети, то получим данные из них (фото, имя) if ($request->provider === 'facebook' && $fb->token()) { $fbUserData = $fb->api('/me'); $fbPhoto = $fb->getPhoto($fbUserData->id); $user->name = $fbUserData->name; if (isset($fbPhoto->data->url)) { $photoDir = '/var/www/whatitmeans/data/www/what-it-means.ru/files/users/photos/' . $user->id; try { File::saveFromUrl($photoDir, 'main_photo.jpg', $fbPhoto->data->url); } catch (Exception $e) { } } UserSocGlue::create(array('user_id' => $user->id, 'provider' => 'facebook', 'provider_user_id' => $fbUserData->id)); $user->save(); } // вернем ответ return $this->response->onSuccess('User created'); }