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');
 }