Создание приложения, использующего 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> Facebook</a>
<a href="#" class="btn btn-info"><i class="fa fa-twitter"></i> Twitter</a>
<a href="<?php echo $googleAuthURL; ?>" class="btn btn-danger"><i class="fa fa-google"></i> 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>