コード例 #1
0
ファイル: login.php プロジェクト: ValenokPC/tabernacms
 function socialsLogin()
 {
     $allowed_providers = array('facebook');
     $provider = strtolower($this->request('provider'));
     if ($provider and in_array($provider, $allowed_providers)) {
         $hybridauth = new Hybrid_Auth($this->_config);
         $service = $hybridauth->authenticate($provider);
         if ($service->isUserConnected()) {
             $user_profile = $service->getUserProfile();
             if ($user_profile->identifier) {
                 $modelUsers = rad_instances::get('model_core_users');
                 $modelUsers->setState('u_' . $provider . '_id', $user_profile->identifier);
                 $user = $modelUsers->getItem();
                 if (!$user) {
                     if ($user_profile->email) {
                         $modelUsers->clearState();
                         $modelUsers->setState('u_email', $user_profile->email);
                         $user = $modelUsers->getItem();
                         if ($user) {
                             //add social identifier to user
                             switch ($provider) {
                                 case 'facebook':
                                     $user->u_facebook_id = $user_profile->identifier;
                                     break;
                                 case 'twitter':
                                     $user->u_twitter_id = $user_profile->identifier;
                                     break;
                             }
                             $modelUsers->updateItem($user);
                         }
                     }
                     if (!$user) {
                         // create new user
                         $user = new struct_core_users();
                         $user->u_login = $user_profile->displayName ? $user_profile->displayName : '';
                         $user->u_email = $user_profile->email ? $user_profile->email : '';
                         $user->u_group = $this->_treestart;
                         $user->u_email_confirmed = 1;
                         $user->u_fio = $user_profile->firstName ? $user_profile->firstName : '';
                         $user->u_fio = $user_profile->lastName ? $user->u_fio . ' ' . $user_profile->lastName : $user->u_fio;
                         $user->u_address = $user_profile->country ? $user_profile->country : '';
                         $user->u_address = $user_profile->region ? $user->u_address . ', ' . $user_profile->region : $user->u_address;
                         $user->u_address = $user_profile->city ? $user->u_address . ', ' . $user_profile->city : $user->u_address;
                         $user->u_address = $user_profile->address ? $user->u_address . ', ' . $user_profile->address : $user->u_address;
                         $user->u_phone = $user_profile->phone ? $user_profile->phone : '';
                         $user->u_subscribe_active = 0;
                         switch ($provider) {
                             case 'facebook':
                                 $user->u_facebook_id = $user_profile->identifier;
                                 break;
                             case 'twitter':
                                 $user->u_twitter_id = $user_profile->identifier;
                                 break;
                         }
                         $modelUsers->insertItem($user);
                         $user->u_id = $modelUsers->inserted_id();
                     }
                 }
                 if (rad_session::social_login($user_profile->identifier, $provider)) {
                     $this->setVar('user', $this->getCurrentUser());
                     $this->redirect($this->makeURL('action=soc_refresh'));
                 } else {
                     //login incorrect
                     $this->setVar('message_error', $this->lang('error.session.message'));
                     $this->setVar('req', $this->getAllRequest());
                 }
             }
         } else {
             throw new Exception("Can not connect to the service!");
         }
     } else {
         $this->securityHoleAlert(__FILE__, __LINE__, $this->getClassName());
     }
 }