Конфликт входа в Facebook и Google в Codeigniter - PullRequest
0 голосов
/ 24 апреля 2020

Создание приложения, использующего Codeigniter, для входа в Facebook и Google. Кажется, есть конфликт в двух методах входа, которые у меня есть. Оба куска кодов для каждого назначенного провайдера работают в одиночку, но конфликт возникает, когда они объединяются.

По сути, я настраиваю экран профиля так же, как экран входа в систему, так как я все еще пробую вход в Facebook и Google. Если есть пользовательские данные, то отображать детали, если не отображать форму входа.

Когда я использую этот код ниже, при входе в Facebook возникает ошибка Ошибка при получении токена доступа OAuth2, сообщение: invalid_grant , но тип ошибки: Google_AuthException . Вход в систему происходит, потому что я заметил, что мой Facebook входит в систему, когда я go на Facebook, но данные сеанса не сохраняются. Идет логин через Google, загружается страница входа с данными пользователя, НО, когда я обновляю sh, он не сохраняет данные сеанса.

public function index(){ 

    // Authenticate user with facebook 
    if($this->facebook->is_authenticated()){ 
        $userData = array(); 
        // Get user info from facebook 
        $fbUser = $this->facebook->request('get', '/me?fields=id,first_name,last_name,email,link,gender,picture'); 

        // Preparing data for database insertion 
        $userData['oauth_provider'] = 'facebook'; 
        $userData['oauth_uid']    = !empty($fbUser['id'])?$fbUser['id']:'';; 
        $userData['first_name']    = !empty($fbUser['first_name'])?$fbUser['first_name']:''; 
        $userData['last_name']    = !empty($fbUser['last_name'])?$fbUser['last_name']:''; 
        $userData['email']        = !empty($fbUser['email'])?$fbUser['email']:''; 
        $userData['gender']        = !empty($fbUser['gender'])?$fbUser['gender']:''; 
        $userData['picture']    = !empty($fbUser['picture']['data']['url'])?$fbUser['picture']['data']['url']:''; 
        $userData['link']        = !empty($fbUser['link'])?$fbUser['link']:'https://www.facebook.com/'; 

        // Insert or update user data to the database 
        $userID = $this->user->checkUserFacebook($userData); 

        $userData['user_id'] = $userID;
        // Check user data insert or update status 
        if(!empty($userID)){ 
            $data['userData'] = $userData; 

            // Store the user profile info into session 
            $this->session->set_userdata('loggedIn', true); 
            $this->session->set_userdata('userData', $userData); 
        }else{ 
           $data['userData'] = array(); 
        } 
    }else{ 
        // Facebook authentication url 
        $data['facebookAuthURL'] =  $this->facebook->login_url(); 
        $data['userData'] = array(); 
    } 

    if(isset($_GET['code'])){ 

        // Authenticate user with Google 
        if($this->google->getAuthenticate()){ 

            // Get user info from Google 
            $gpInfo = $this->google->getUserInfo(); 

            // Preparing data for database insertion 
            $userData['oauth_provider'] = 'google'; 
            $userData['oauth_uid']         = $gpInfo['id']; 
            $userData['first_name']     = $gpInfo['given_name']; 
            $userData['last_name']         = $gpInfo['family_name']; 
            $userData['email']             = $gpInfo['email']; 
            $userData['gender']         = !empty($gpInfo['gender'])?$gpInfo['gender']:''; 
            $userData['locale']         = !empty($gpInfo['locale'])?$gpInfo['locale']:''; 
            $userData['picture']         = !empty($gpInfo['picture'])?$gpInfo['picture']:''; 

            // Insert or update user data to the database 
            $userID = $this->user->checkUserGoogle($userData); 
            $userData['user_id'] = $userID;
            // Store the status and user profile info into session 
            $this->session->set_userdata('loggedIn', true); 
            $this->session->set_userdata('userData', $userData); 
            $data['userData'] = $userData; 
            // Redirect to profile page 
        } 
    }else{
        $data['userData'] = array(); 
    } 

    // Google authentication url 
    $data['googleAuthURL'] = $this->google->loginURL(); 

    // Load login/profile view 
    $this->load->view('login_view',$data);
}

Теперь я попробовал этот вид настройки кода и что случается, происходит ли вход в Facebook, данные сохраняются в данных сеанса, даже если я обновлю sh. Но когда я пытаюсь войти в систему с помощью Google, вход в систему происходит через, потому что я заметил, что моя учетная запись Google регистрируется всякий раз, когда я go в Gmail, но не сохраняется никаких данных сеанса, так как я просто возвращаюсь на страницу входа с логином форма.

public function index(){ 

    // Authenticate user with facebook 
    if($this->facebook->is_authenticated()){ 
        $userData = array(); 
        // Get user info from facebook 
        $fbUser = $this->facebook->request('get', '/me?fields=id,first_name,last_name,email,link,gender,picture'); 

        // Preparing data for database insertion 
        $userData['oauth_provider'] = 'facebook'; 
        $userData['oauth_uid']    = !empty($fbUser['id'])?$fbUser['id']:'';; 
        $userData['first_name']    = !empty($fbUser['first_name'])?$fbUser['first_name']:''; 
        $userData['last_name']    = !empty($fbUser['last_name'])?$fbUser['last_name']:''; 
        $userData['email']        = !empty($fbUser['email'])?$fbUser['email']:''; 
        $userData['gender']        = !empty($fbUser['gender'])?$fbUser['gender']:''; 
        $userData['picture']    = !empty($fbUser['picture']['data']['url'])?$fbUser['picture']['data']['url']:''; 
        $userData['link']        = !empty($fbUser['link'])?$fbUser['link']:'https://www.facebook.com/'; 

        // Insert or update user data to the database 
        $userID = $this->user->checkUserFacebook($userData); 

        $userData['user_id'] = $userID;
        // Check user data insert or update status 
        if(!empty($userID)){ 
            $data['userData'] = $userData; 

            // Store the user profile info into session 
            $this->session->set_userdata('loggedIn', true); 
            $this->session->set_userdata('userData', $userData); 
        }else{ 
           $data['userData'] = array(); 
        } 
    }else{ 
        // Facebook authentication url 
        $data['facebookAuthURL'] =  $this->facebook->login_url(); 
        $data['userData'] = array(); 
    } 

    if (!empty($this->session->userdata('userData'))) {
        if ($this->session->userdata('userData')['oauth_provider'] == 'google') {
            if(isset($_GET['code'])){ 

                // Authenticate user with Google 
                if($this->google->getAuthenticate()){ 

                    // Get user info from Google 
                    $gpInfo = $this->google->getUserInfo(); 

                    // Preparing data for database insertion 
                    $userData['oauth_provider'] = 'google'; 
                    $userData['oauth_uid']         = $gpInfo['id']; 
                    $userData['first_name']     = $gpInfo['given_name']; 
                    $userData['last_name']         = $gpInfo['family_name']; 
                    $userData['email']             = $gpInfo['email']; 
                    $userData['gender']         = !empty($gpInfo['gender'])?$gpInfo['gender']:''; 
                    $userData['locale']         = !empty($gpInfo['locale'])?$gpInfo['locale']:''; 
                    $userData['picture']         = !empty($gpInfo['picture'])?$gpInfo['picture']:''; 

                    // Insert or update user data to the database 
                    $userID = $this->user->checkUserGoogle($userData); 
                    $userData['user_id'] = $userID;
                    // Store the status and user profile info into session 
                    $this->session->set_userdata('loggedIn', true); 
                    $this->session->set_userdata('userData', $userData); 
                    $data['userData'] = $userData; 
                    // Redirect to profile page 
                } 
            }else{
                $data['userData'] = array(); 
            } 
        }
    }

    // Google authentication url 
    $data['googleAuthURL'] = $this->google->loginURL(); 

    // Load login/profile view 
    $this->load->view('login_view',$data);
}

Это мой взгляд.

<main>
    <?php if ($this->session->userdata('userData')['user_id'] == '') { ?>
    <header>
        <h1>Login</h1><br>
    </header>
    <div class="login-form">
        <form action="/examples/actions/confirmation.php" method="post">
            <div class="form-group">
                <div class="input-group">
                    <span class="input-group-addon"><i class="fa fa-user"></i></span>
                    <input type="email" class="form-control" name="email" placeholder="Email" required="required">              
                </div>
            </div>
            <div class="form-group">
                <div class="input-group">
                    <span class="input-group-addon"><i class="fa fa-lock"></i></span>
                    <input type="password" class="form-control" name="password" placeholder="Password" required="required">             
                </div>
            </div>        
            <div class="form-group">
                <button type="submit" class="btn btn-primary login-btn btn-block">Sign in</button>
            </div>
            <div class="clearfix">
                <label class="pull-left checkbox-inline" style="color: #d53369;"><input type="checkbox"> Remember me</label>
                <a href="#" class="pull-right" style="color: #d53369;">Forgot Password?</a>
            </div>
            <div class="or-seperator"><i>or</i></div>
            <p class="text-center">Login with your social media account</p>
            <div class="text-center social-btn">
                <a href="<?php echo $facebookAuthURL; ?>" class="btn btn-primary"><i class="fa fa-facebook"></i>&nbsp; Facebook</a>
                <a href="#" class="btn btn-info"><i class="fa fa-twitter"></i>&nbsp; Twitter</a>
                <a href="<?php echo $googleAuthURL; ?>" class="btn btn-danger"><i class="fa fa-google"></i>&nbsp; Google</a>
            </div>
        </form>
        <p class="text-center text-muted small" style="margin: 0px; color: #fff;">Don't have an account? <a href="#" style="color: #d53369;">Sign up here!</a></p>
        <?php }else{ ?>
        <header>
            <h1>User</h1><br>
        </header>
        <h2>Profile Details</h2>
        <div class="ac-data">
            <img src="<?php echo $userData['picture']; ?>"/><br>
            <p><b>OAuth ID:</b> <?php echo $userData['oauth_uid']; ?></p>
            <p><b>OAuth ID:</b> <?php echo $userData['oauth_provider']; ?></p>
            <p><b>Name:</b> <?php echo $userData['first_name'].' '.$userData['last_name']; ?></p>
            <p><b>Email:</b> <?php echo $userData['email']; ?></p>
            <p><b>Gender:</b> <?php echo $userData['gender']; ?></p>
            <p><b><a href="<?php echo base_url('login/logout'); ?>">Logout</a></p>
        </div>
        <?php } ?>
    </div>
</main>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...