Tôi đang sử dụng this Facebook lib cho CodeIgniter để người dùng có thể đăng nhập bằng Facebook. Hoạt động hoàn toàn tốt trên sản xuất, nhưng không phải trên localhost. Điều làm tôi lo lắng là nó được sử dụng để làm việc tốt trên localhost, nhưng đột nhiên ngừng hoạt động.session codeigniter localhost
Tôi đã tìm kiếm một thời gian và tôi hy vọng rằng điều này có liên quan đến thư viện phiên của CI, nhưng tôi không chắc chắn 100%.
thông tin nền
- Tôi đang chạy MAMP với PHP 5.5.10 và Chrome 41.0.2272.118
- tại địa phương tôi đã cấu hình httpd.conf trong MAMP để url địa phương của tôi là một ' URL thực như 'www.example-local.net và cổng Apache là 80
if($this->session)
trong chế độ xem trả về true. CHỈNH SỬA; Tôi không thực sự sử dụng điều này trong một cái nhìn nhưng nó chỉ để kiểm tra rằng điều này đang làm việc- Mã sản xuất và phát triển hoàn toàn giống nhau, ngoại trừ khóa API Facebook và bí mật vì tôi sử dụng ứng dụng thử nghiệm cục bộ. Như được chỉ ra; nó hoạt động hoàn hảo trước và tôi chưa thay đổi cài đặt ứng dụng thử nghiệm của mình.
- EDIT: Tôi có TLD được định cấu hình làm miền ứng dụng và URL trang web trong ứng dụng thử nghiệm FB. Một lần nữa, điều này dường như không có vấn đề kể từ
Vấn đề
if($this->session)
trong (Facebook) tập tin thư viện trả về false. CHỈNH SỬA; điều này có vẻ là vấn đề. Vì vậy, điều này là làm việc trong quan điểm, không phải trong thư viện. Điều kỳ lạ về nó là điều này đã làm việc trước (không thay đổi code)- Nó cũng có vẻ như do đó thư viện không đặt
fb_boken
trong userdata phiên và đó là lý do tại sao tôi nghi ngờ có điều gì đó sai với thiết$this->session
- tôi đã chuyển sang múi giờ khác (chỉ 1 giờ) và tôi đọc ở đâu đó rằng điều này có thể gây ra sự cố? CHỈNH SỬA; Tôi đã trở lại trong múi giờ nơi nó làm việc trước đây và nó vẫn không làm việc
Những gì tôi đã cố gắng và đã không làm việc
- Trong
config.php
thiết$config['sess_expiration']
đến một giá trị cao (ví dụ 999999) thay vì 7200 - Trong
config.php
thay đổi$config['cookie_domain']
thành trang web localhost (http://www.example-local.net
, đã thử và không có dấu gạch chéo) thay vì trống ("") - Trong
config.php
thay đổi$config['sess_match_useragent']
-FALSE
thay vìTRUE
- Thay thế ứng dụng/hệ thống/thư viện/Session.php với phiên bản của PHP như mô tả here
- Xóa tất cả các tập tin cookie và dữ liệu duyệt
thông tin khác liên quan đến config.php
$config['cookie_prefix'] = "";
$config['cookie_domain'] = "";
$config['cookie_path'] = "/";
$config['cookie_secure'] = FALSE;
Tôi hy vọng rằng việc sử dụng phiên gốc của PHP sẽ giải quyết được vấn đề, nhưng không. Không chắc tôi có thể thử những gì khác.
Để tham khảo đầy đủ Facebook.php tập tin thư viện mã
<?php if (! defined('BASEPATH')) exit('No direct script access allowed');
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
require_once(APPPATH . 'libraries/facebook/Facebook/GraphObject.php');
require_once(APPPATH . 'libraries/facebook/Facebook/GraphSessionInfo.php');
require_once(APPPATH . 'libraries/facebook/Facebook/FacebookSession.php');
require_once(APPPATH . 'libraries/facebook/Facebook/FacebookCurl.php');
require_once(APPPATH . 'libraries/facebook/Facebook/FacebookHttpable.php');
require_once(APPPATH . 'libraries/facebook/Facebook/FacebookCurlHttpClient.php');
require_once(APPPATH . 'libraries/facebook/Facebook/FacebookResponse.php');
require_once(APPPATH . 'libraries/facebook/Facebook/FacebookSDKException.php');
require_once(APPPATH . 'libraries/facebook/Facebook/FacebookRequestException.php');
require_once(APPPATH . 'libraries/facebook/Facebook/FacebookAuthorizationException.php');
require_once(APPPATH . 'libraries/facebook/Facebook/FacebookRequest.php');
require_once(APPPATH . 'libraries/facebook/Facebook/FacebookRedirectLoginHelper.php');
use Facebook\GraphSessionInfo;
use Facebook\FacebookSession;
use Facebook\FacebookCurl;
use Facebook\FacebookHttpable;
use Facebook\FacebookCurlHttpClient;
use Facebook\FacebookResponse;
use Facebook\FacebookAuthorizationException;
use Facebook\FacebookRequestException;
use Facebook\FacebookRequest;
use Facebook\FacebookSDKException;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\GraphObject;
class Facebook {
var $ci;
var $helper;
var $session;
public function __construct() {
$this->ci =& get_instance();
FacebookSession::setDefaultApplication($this->ci->config->item('api_id', 'facebook'), $this->ci->config->item('app_secret', 'facebook'));
$this->helper = new FacebookRedirectLoginHelper($this->ci->config->item('redirect_url', 'facebook'));
if ($this->ci->session->userdata('fb_token')) {
$this->session = new FacebookSession($this->ci->session->userdata('fb_token'));
// Validate the access_token to make sure it's still valid
try {
if (! $this->session->validate()) {
$this->session = false;
}
} catch (Exception $e) {
// Catch any exceptions
$this->session = false;
}
} else {
try {
$this->session = $this->helper->getSessionFromRedirect();
} catch(FacebookRequestException $ex) {
// When Facebook returns an error
} catch(\Exception $ex) {
// When validation fails or other local issues
}
}
if ($this->session) {
$this->ci->session->set_userdata('fb_token', $this->session->getToken());
$this->session = new FacebookSession($this->session->getToken());
}
}
/*
|--------------------------------------------------------------------------
| Login URL
|--------------------------------------------------------------------------
*/
public function get_login_url() {
return $this->helper->getLoginUrl($this->ci->config->item('permissions', 'facebook'));
}
/*
|--------------------------------------------------------------------------
| Logout URL
|--------------------------------------------------------------------------
*/
public function get_logout_url() {
if ($this->session) {
return $this->helper->getLogoutUrl($this->session, site_url());
}
return false;
}
/*
|--------------------------------------------------------------------------
| Get user data
|--------------------------------------------------------------------------
*/
public function get_user() {
if ($this->session) {
try {
$user = (new FacebookRequest($this->session, 'GET', '/me'))->execute()->getGraphObject()->asArray();
return $user;
} catch(FacebookRequestException $e) {
return false;
}
}
}
}
http://stackoverflow.com/questions/9957218/use-facebook-login-in-localhost – Vickel
tôi sử dụng một máy chủ ảo với một TLD, vì vậy tên miền cục bộ của tôi là www.example-local.net – eskimo
Chỉ cần kiểm tra Tôi cũng ở cổng 80. Vì vậy, đó không phải là vấn đề. – eskimo