Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Как сделать редирект если ответ NULL?


Recommended Posts

Имеется модуль авторизации Вконтакт. Модуль запрашивает данные профиля и email. Пользователь может запретить отдачу своего email и тогда ответ приходит следующего вида

array(1) {["response"]=> array(1) {[0]=> array(4) {["uid"]=> int(727123) ["first_name"]=> string(14) "Вася" ["last_name"]=> string(14) "Пупкин" ["email"]=> NULL } } }

По этим данным скрипт регистрирует нового пользователя, что не верно, т.к. аутентификация осуществляется именно по email-у которого у нас нету. В БД записывается пустой email.  Как следствие все, кто после этого откажутся отдавать email автоматически логинятся под данными того человека, т.к. email совпадают, они пустые.

Не могу разобраться, как сделать редирект на произвольную страницу, если ["email"]=> NULL
Ну а если ["email"]=> string(15) "[email protected]"  - то скрипт выполняется дальше и происходит регистрация.

 

 

public function vk() {
        $this->language->load('module/sociallogin');
        // Check if module is on
        if(!$this->config->get('sociallogin_vkontakte_status') ){
            $this->redirect($this->url->link('account/login', '', 'SSL'));
        }

        $IS_DEBUG = 0;
        $REDIRECT_URI = $this->url->link('module/sociallogin/vk');


        if(!isset($this->request->get['code']) || empty($this->request->get['code'])){
            // If this is first request
            if(isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER'])){
                setcookie("soclogin_ref", $_SERVER['HTTP_REFERER']);
                setcookie("soclogin_ref1", $this->url->link('account/simpleedit', ''));
                setcookie("soclogin_ref2", $this->url->link('common/home', '', 'SSL'));                        
            }else{
                setcookie("soclogin_ref", $this->url->link('account/account', '', 'SSL'));
                setcookie("soclogin_ref1", $this->url->link('account/simpleedit', '', 'SSL'));
                setcookie("soclogin_ref2", $this->url->link('common/home', '', 'SSL'));            
            }
            
            $APP_ID = $this->config->get('sociallogin_vkontakte_appid');

            $url = 'https://oauth.vk.com/authorize?client_id='.$APP_ID.
                '&scope=SETTINGS,email'.
                '&redirect_uri='.$REDIRECT_URI.
                '&display=page'.
                '&response_type=code';
            header("Location: ".$url);

        }else{
            // if it is request from vk server already

            $CODE = $this->request->get['code'];

            $CURRENT_URI = $_COOKIE['soclogin_ref'];
            $CURRENT_URI1 = $_COOKIE['soclogin_ref1'];
            $CURRENT_URI2 = $_COOKIE['soclogin_ref2'];

            $CLIENT_ID = $this->config->get('sociallogin_vkontakte_appid');
            $CLIENT_SECRET = $this->config->get('sociallogin_vkontakte_appsecret');

            $url = "https://oauth.vk.com/access_token?client_id=".$CLIENT_ID.
                   "&client_secret=".$CLIENT_SECRET.
                   "&code=".$CODE.'&redirect_uri='.$REDIRECT_URI;

            if( $IS_DEBUG ) echo $url."<hr>";


            if( extension_loaded('curl') ){
                $c = curl_init($url);
                curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
                $response = curl_exec($c);
                curl_close($c);
            }else{
                $response = file_get_contents($url);
            }


            if( $IS_DEBUG ) echo $response."<hr>";

            $data = json_decode($response, true);

            if( !empty($data['access_token']) ){
                $graph_url = "https://api.vk.com/method/users.get?uids=".$data['user_id'].
                "&fields=uid,first_name,last_name&access_token=".$data['access_token'];

                if( $IS_DEBUG ) echo $graph_url."<hr>";

                if( extension_loaded('curl') ){
                    $c = curl_init($graph_url);
                    curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
                    $json = curl_exec($c);
                    curl_close($c);
                }else{
                    $json = file_get_contents($graph_url);
                }

                if( $IS_DEBUG ) echo $json;
                $json_data = json_decode($json, TRUE);                
                $json_data['response'][0]['email'] = $data['email'];
 //               var_dump ($json_data);

                $userdata = array();
                foreach($json_data['response'][0] as $key => $usrdata){
                    switch($key){
                        case "first_name":
                            $userdata["firstname"] = $usrdata;
                        case "last_name":
                            $userdata['lastname'] = $usrdata;
                        default:
                            $userdata[$key] = $usrdata;
                    }
                }

                $this->load->model('account/customer');
                
                if($this->model_account_customer->getTotalCustomersByEmail($userdata['email'])){
                    // login without password
                    $this->customer->login($userdata['email'], "", true);
                    $this->redirect($CURRENT_URI);
                }else{
                    // generate array to create new customer
                    $userdata['newsletter'] = 1;
                    $userdata['country_id'] = 20;
                    $userdata['country_id'] = 20;                    
                    $userdata['telephone'] = $userdata['fax'] = $userdata['company_id'] = $userdata['address_1'] = $userdata['city'] = '';
                    $userdata['company'] = $userdata['tax_id'] = $userdata['address_2'] = $userdata['postcode'] = $userdata['zone_id'] = '';
                    $userdata['password'] = $this->generatePassword();
                    $this->model_account_customer->addCustomer($userdata);
                    $this->customer->login($userdata['email'], $userdata['password']);
//                    $this->mailPassword($userdata);
                    $this->redirect($CURRENT_URI1);
                }
            }
        }

    }

Прошу помощи.
Спасибо.

Змінено користувачем Evgenka
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.