2011-10-15 160 views
2

我想整合我現有的PHP網站與Facebook登錄功能。我目前有一個簡單的登錄註冊用戶名,密碼和電子郵件進行激活,他們的詳細信息存儲在MYSQL數據庫中。我想爲Facebook用戶添加額外的登錄訪問權限。我很擔心我將如何將我當前的登錄訪問與新的Facebook訪問進行整合。我的想法是我的所有頁面都需要用戶登錄,我使用cookie來存儲會話變量,比如我用來在網頁上構建內容的暱稱。Facebook集成在PHP網站

我很困惑我在網絡上研究的許多方法,有些現在已經過時了,而其他的方法似乎是一半的解決方案。這三個不斷重複出現。

A)Login.php,Register.php和fbReg.php 使用fb login/register創建會話並將身份驗證傳遞給fbReg.php時,login.php和register.php出現,但它只是頁面重定向後,在那裏停留在空白屏幕上。

(從Register.php片段)

<script type="text/javascript"> 
FB.init({appId: '<?php echo $fb_app_id; ?>', status: true, 
    cookie: true, xfbml: true}); 

<?php 
    if ($errors == 0) { 
    ?> 
    $('#form_hidden').hide(); 
<?php } else { ?> 
    checkInput('username'); 
    checkInput('email'); 
    checkInput('lastname'); 
    checkInput('firstname'); 
    checkInput('password'); 
    checkInput('password2'); 
<?php } ?> 
</script> 

B)傳統連接驗證 http://developers.facebook.com/docs/authentication/connect_auth/ 使用我構建了一些測試腳本上面的鏈接只是爲了看看如果驗證是可行的。幸運的是,在我的網站上,我擁有第三方廣告或網頁框,但按照步驟從我的主登錄頁面構建interstitial_page和重定向頁面。但是我不斷收到一個空會話。

(從PHP登錄頁面片斷)

$api_key = "YOUR_API_KEY"; 
$interstitial_page = "YOUR_SECURE_URL"; //URL with no 3rd party apps 

$url='http://www.facebook.com/login.php?api_key=' . $api_key 
. '&session_version=3&next=' . urlencode($interstitial_page) 
. '&v=1.0&return_session=1&fbconnect=1' 
. '&cancel_url=' . urlencode($interstitial_page); 

echo "Welcome to the Old Auth flow"; 
echo "<p>"; 

echo("<a href='" . $url . "'>" 
. "<img src='http://static.ak.facebook.com/images/" 
. "devsite/facebook_login.gif'></a>"); 

C)的OAuth 2.0協議 http://developers.facebook.com/docs/authentication/ 當我使用這個再次使用下面的腳本:

https://www.facebook.com/dialog/oauth? 
client_id=YOUR_APP_ID&redirect_uri=YOUR_URL 

我曾嘗試和失敗,使用它來捕獲我的新facebook用戶的用戶信息並將其存儲到MySQL數據庫,然後將這個經過身份驗證的Facebook訪問與'正常'網絡訪問用戶會話集成,因爲它已關聯會話vari用於用戶體驗的ables。

任何幫助將不勝感激,即時通訊掙扎。

感謝邁克爾

我得到了一個空白屏幕上fbReg.php

回答

0

,如果你談論的是社會的插件,我不能說,但如果你是,這些Facebook Plug-ins擁有發電機建進入將生成你需要的代碼的頁面。

如果您不是在尋找插件,而是爲用戶提供的信息,我仍然建議您運行生成器以獲取代碼並查看Facebook如何爲用戶獲取信息。

遵循簡單腳本的路徑應該讓你到你需要的地方。

+0

感謝您的回答。我正在使用擴展插件進行社交插件。一個簡單的登錄按鈕,註冊和身份驗證。我的網站已經這樣做了,但我想通過Facebook身份驗證添加Facebook新用戶註冊和常規用戶訪問。我在facebook dev網站或更廣泛的網站上看到的任何內容都似乎給了我一個清晰的想法,即我需要在Facebook訪問我現有的PHP文件時開始構建。 –

+0

https://developers.facebook.com/docs/reference/plugins/login/登錄就在那裏,認證將被這個插件自動使用。您可以使用i-frame進行註冊,因爲沒有API來註冊新用戶。這iframe可以去註冊所在的主頁 – nmagerko

+0

謝謝你的建議,但我不認爲你完全理解我的要求。讓我解釋。我希望之前從未使用過我的網絡應用程序的Facebook用戶能夠註冊我的MYSQL數據庫,並獲得'正常'用戶的所有屬性,包括'網站'會話而不是Facebook會話。所有新的OAuth 2.0插件登錄/註冊/身份驗證都很容易設置,但很難集成到我現有的網站中,因爲我想獲取用戶信息並將其保存到我的MYSQL用戶數據庫併爲用戶創建會話cookie變量所述用戶信息。遺留的東西現在不工作。 –

3

上週我剛剛爲我的網站做了這件事情,所以我知道要對所有的許多方法進行排序有多困難,其中許多方法已經過時。這是我的方法:

  1. 我放在我的網站「登錄與Facebook的」鏈接會被重定向到我的正常的註冊頁面。

    <a href="http://www.facebook.com/dialog/oauth?client_id=<? echo $FACEBOOK_APP_ID ?>&redirect_uri=http://www.yoursite.com/register.php&scope=email">Log in with Facebook</a> 
    
  2. 我的註冊腳本是這樣的:

    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml"> 
    <head></head> 
    <body> 
    <div id="fb-root"></div> 
    <script src="http://connect.facebook.net/en_US/all.js"></script> 
    <script> 
    FB.init({appId: '<? echo $FACEBOOK_APP_ID ?>', status: true, cookie: true, xfbml: true}); 
    FB.Event.subscribe('auth.login', function(response) { window.location.reload(); }); 
    </script> 
    
    function get_facebook_cookie($app_id, $app_secret) 
    { 
        $args = array(); 
        parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args); 
    
        ksort($args); 
        $payload = ''; 
        foreach ($args as $key => $value) { 
        if ($key != 'sig') { 
        $payload .= $key . '=' . $value; 
        } 
        } 
        if (md5($payload . $app_secret) != $args['sig']) { 
        return null; 
        } 
        return $args; 
    } 
    
    $cookie = get_facebook_cookie($FACEBOOK_APP_ID, $FACEBOOK_SECRET); 
    if($cookie) 
    { 
        $access_token = $cookie['access_token']; 
    
    } 
    $url = 'https://graph.facebook.com/me?access_token='.$access_token; 
    $graph = file_get_contents($url); 
    if($graph) 
    { 
    
        $fbuser = json_decode($graph); 
        $userid = $fbuser->id; 
        $email = mysql_real_escape_string($fbuser->email); 
    
        /********************** 
        I placed code here to check if the email already exists in my database, which means they are already a member. 
        In that case, I retrieve their username and password from the database and automatically log them 
        in by rerouting them to my login script with their crenditials sent as well. 
        ***********************/ 
    
        /********************** 
        If the email is not already in my database, then I know it's a new user and so I prompt them to make a username here. 
        ***********************/ 
    } 
    //The user either opted to log in using my traditional non-Facebook method, or something went wrong with the FB authentication 
    else 
    { 
    
        /********************** 
        Show my normal registration form that prompts for username, email, etc 
        ***********************/ 
    } 
    
  3. 在我的登錄腳本,我設置的用戶名,餅乾等正常。

希望這有助於!

+0

它非常有幫助。你有一個非常好的解決方案,我剛剛有幾個問題要問。 1)當你有一個新的fb用戶,並且需要選擇facebook路線時,在你給他們facebook註冊並且他們被認證後,你如何將他們搭載到有效的會話上?是否通過將它們重新路由到具有憑據的預填充登錄腳本? 2)你json_decode獲得$ userid和$ email。你使用這些插入到你的數據庫?我想在我的網絡應用程序中使用fb名字lastname和用戶名。 –

+0

1.是的,當我有一個新的FB用戶,他們選擇一個用戶名後,我的代碼基本上登錄他們(本質上設置會話cookie),就好像他們自己點擊了傳統的登錄按鈕。因此,在您的註冊腳本中,在您獲得了新FB用戶所需的所有信息後,只需重新路由到您的登錄腳本即可傳遞其憑據。我使用我的腳本自行提交的隱藏表單來做到這一點。 2.是的,一旦我有了用戶名和電子郵件,然後讓他們選擇一個用戶名,我作爲一個新用戶插入到我的數據庫。 –

+0

你介意分享你的完整腳本 - 註冊和修改登錄頁面。 (顯然不敏感)。我的電子郵件是[email protected]。我很感激。謝謝 –