Wordpress에서 Facebook 세션 가져오기
배경
우리는 특별한 종류의 페이스북 인증을 필요로 하는 워드프레스 사이트를 가지고 있다.WP 사이트는 다른 앱으로 사용자를 인증한 후 해당 앱에 로그인해야 합니다.웹 앱은 우리가 만든 것으로 WP 사이트에서 사용하는 API를 가지고 있습니다.모두가 난폭해지기 전에, 이 인증 프로세스 전체가 통상의 로그인 폼을 사용해 동작합니다.API를 사용하면 사용자가 앱에 로그인했는지 로그인하지 않았는지 쉽게 알 수 있으며 WP 사이트에 표시할 수 있습니다.
문제
말씀드린 바와 같이 페이스북 인증이 필요합니다.저는 Facebooks PHP SDK v4를 사용하고 있으며, 코드와 테마를 분리할 수 있도록 커스텀 플러그인에 내장되어 있습니다.사용자가 FB 아이콘을 클릭하면 올바른 방향 수정 URL과 함께 팝업이 표시됩니다. 잠시 후 이 팝업이 닫히지만 결과에는 아무것도 표시되지 않습니다.몇 군데 잘 배치되어 있다.var_dumps
나는 아무것도 돌려받지 못하고 있음을 밝히다FacebookRedirectLoginHelper
이는 세션을 얻을 수 없음을 의미하며, 이는 사용자 정보가 없음을 의미합니다.
코드
이미 설명한 바와 같이 플러그인을 작성했습니다.ns-social.php
모든 것을 처리할 수 있습니다.이 파일은 다음과 같습니다.
/**
* Plugin Name: NS Social Plugin
*/
require_once 'ns-social-init.php';
require_once 'ns-callback-functions.php';
require_once 'ns-facebook.php' ;
$fb = null;
add_action('plugins_loaded','load_fb');
function load_fb() {
global $fb;
$fb = new WP_Facebook();
}
/**
* SOCIAL LOGIN CHECK
*/
function get_fb_url()
{
global $fb;
return $fb->login_url();
}
ns-social-init.php
는 FB가 사용할 수 있는 세션을 시작합니다.
/**
* Any functions that are required during initialisation of Wordpress or this plugin
*/
add_action('plugins_loaded', 'start_session');
function start_session()
{
if (!session_id()) {
session_start();
}
}
ns-callback-functions.php
에 리다이렉트의 모든 콜백 함수를 나타냅니다.이것들은 모두 페이지에 배치되는 쇼트 코드이기 때문에 URL은 다음과 같습니다.www.site.com/facebook-callback
그리고 그 페이지에는[facebook-callback]
에서 요청을 처리합니다.
add_shortcode('facebook_callback', 'facebook_callback');
function facebook_callback()
{
global $fb;
if (isset($_GET['error'])) {
if ($_GET['error'] == 'access_denied') {
echo "<script>
if(window.opener != null) {
window.close();
}
</script>";
exit;
}
}
$session = $fb->get_session();
$userArr = $fb->get_user();
$user['name'] = $userArr['first_name'];
$user['surname'] = $userArr['last_name'];
$user['email'] = $userArr['email'];
$user['verified'] = $userArr['verified'];
$_SESSION['registeruser'] = $user;
$_SESSION['registertype'] = 'Facebook';
$action = "";
die(var_dump($_SESSION,true));
if (user_exists($user['email'])) {
$action = '?login';
}
wp_redirect(home_url('social-register/' . $action));
}
그리고 마지막으로 중요한 건ns-facebook.php
파일:
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
class WP_Facebook
{
var $helper;
var $session;
var $permissions;
var $loginurl;
public function __construct()
{
// Initialize the SDK
FacebookSession::setDefaultApplication('0appId145', '00hahaitsmysecret23523');
$this->permissions = ['public_profile', 'email'];
$this->helper = new FacebookRedirectLoginHelper(home_url('facebook-callback'));
$this->loginurl = $this->helper->getLoginUrl($this->permissions);
}
/**
* Returns the login URL.
*
* @return string
*/
public function login_url()
{
return $this->loginurl;
}
/**
* Returns the current user's info as an array.
*/
public function get_user($session = null)
{
if(empty($session)) $session = $this->session;
if($session) {
/**
* Retrieve User's Profile Information
*/
// Graph API to request user data
$request = new FacebookRequest($session, 'GET', '/me');
$response = $request->execute();
// Get response as an array
$user = $response->getGraphObject()->asArray();
return $user;
}
return false;
}
public function get_session() {
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) {
return $this->session;
}
}
}
내가 시도한 것
SO에 대해 꽤 많은 질문을 했습니다.제가 깨달은 것은, 이 페이지를 처음 실행했을 때,FBRLH_state
제 세션에서는abcdef
예를들면.하지만 로그인 버튼을 클릭한 후 응답을 받으면FBRLH_state
이xyz
이게 결과에 영향을 미칠지 모르겠어요.만약 가능하다면, 이 상태를 어떻게 사용할 수 있을까요?설정하지 않았습니다.FB SDK가 설정했을 거라고 생각합니다.
TL;DR
FB PHP SDK v4를 사용해도 아무것도 반환되지 않습니다.FacebookRedirectLoginHelper
왜 이런 일이 일어나는지, 어떻게 수정하면 좋을까요?
공식 Facebook Redirect Login으로 테스트를 만들었습니까?공식 GitHub의 도우미?Facebook SDK를 여러 번 사용해 본 적이 있으며, 반품 누락에 대해서는 전혀 문제가 없습니다.
그래서 나는 corvuszero의 코멘트에 도움을 받아 내 문제를 해결했다.
ns-facebook.php
삭제:
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\FacebookRedirectLoginHelper;
class WP_Facebook
{
var $helper;
var $session;
var $permissions;
var $loginurl;
public function __construct()
{
// Initialize the SDK
FacebookSession::setDefaultApplication('303664476506500', '0197b7f08cc46f051ddb92dfba077484');
$this->permissions = ['public_profile', 'email'];
$this->helper = new FacebookRedirectLoginHelper( home_url('facebook-callback') );
try {
$this->session = $this->helper->getSessionFromRedirect();
} catch (FacebookRequestException $e) {
// handler
} catch (Exception $e) {
// handler
}
if(isset($_SESSION['fb_token'])) {
$this->session = new FacebookSession( $_SESSION['fb_token'] );
}
if($this->session) {
$_SESSION['fb_token'] = $this->session->getToken();
} else {
$this->loginurl = $this->helper->getLoginUrl($this->permissions);
}
}
/**
* Returns the login URL.
*
* @return string
*/
public function login_url()
{
return $this->loginurl;
}
/**
* Returns the current user's info as an array.
*/
public function get_user()
{
if($this->session) {
/**
* Retrieve User’s Profile Information
*/
// Graph API to request user data
$request = new FacebookRequest($this->session, 'GET', '/me');
$response = $request->execute();
// Get response as an array
$user = $response->getGraphObject()->asArray();
return $user;
}
return false;
}
public function get_session() {
return $this->session;
}
}
언급URL : https://stackoverflow.com/questions/30935680/getting-facebook-session-on-wordpress
'programing' 카테고리의 다른 글
Wordpress wpdb 정의되지 않은 변수 (0) | 2023.03.07 |
---|---|
MVC: 문자열을 JSON으로 되돌리는 방법 (0) | 2023.03.07 |
프로젝터를 실행할 수 없음 - ECONNREFUSED 연결 ECONNREFUSED (0) | 2023.03.02 |
모든 기존 사용자에 대한 Wordpress 기본 표시 이름 변경 공개 (0) | 2023.03.02 |
Wordpress cron wp_schedule_single_event – 액션이 항상 작동하지 않음 (0) | 2023.03.02 |