Перейти к содержанию
Evgenka

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

Рекомендуемые сообщения

Имеется модуль авторизации Вконтакт. Модуль запрашивает данные профиля и 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) "pypkin@vasya.ru"  - то скрипт выполняется дальше и происходит регистрация.

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
                if($userdata['email'] == NULL){
                    $this->redirect($CURRENT_URI);
                }

 

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо!

Вот так сработало:

                if($data['email'] == NULL){
                    $this->redirect($CURRENT_URI);
                }

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.