2013-11-21 234 views
0

我正在嘗試在我的網站上實施Facebook登錄。我有一些問題。 當用戶授予我權限時,我被堆積在我的數據庫中創建一個新帳戶(所以我可以使用我的功能來檢查用戶是否已登錄併爲更多員工)。Facebook登錄網站

我的問題是當用戶(已經在我的網站上與Facebook註冊)如何登錄他?只使用他的Facebook ID?但如果是的,其他人知道我的Facebook ID,他可以登錄?

一些代碼片段HTML:

<a href="#facebook" id="f_in" class="log">Log In With Facebook</a> 

JS

window.fbAsyncInit = function() { 
    FB.init({ 
    appId  : 'APPID', // App ID 
    channelURL : '', // Channel File, not required so leave empty 
    status  : true, // check login status 
    cookie  : true, // enable cookies to allow the server to access the session 
    oauth  : true, // enable OAuth 2.0 
    xfbml  : false // parse XFBML 
    }); 
}; 
(function() { 
    var e = document.createElement('script'); e.async = true; 
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';     
    document.getElementById('fb-root').appendChild(e); 
}()); 
//login Function 
function login(){ 
    FB.getLoginStatus(function(response){ 
     if(response.status === 'connected'){ 
       getCurrentUserInfo(response); 
     }else{ 
      FB.login(function(response) { 
       if(response.authResponse) { 
        //if (response.perms) 
         getCurrentUserInfo(response); 
       } else { 
        console.log('Auth cancelled.') 
       } 
      },{scope:'email, user_birthday'}); // which data to access from user profile 
     } 
    }); 
} 
function getCurrentUserInfo() { 
     FB.api('/me', function(userInfo) { 
     do_reg(userInfo); 
    }); 
} 
function do_reg(userInfo){ 
    var dataString = "username="+userInfo.first_name+"&id="+userInfo.userID"&email="+userInfo.email; 
    $.ajax({ 
    type:"POST", 
    url: "do_reg.php", 
    data: dataString, 
      success:function(data){ 
     console.log(data);  
     }, 
    error:function(){ 

    } 
    }); 
} 

和一些PHP:

$username = $_POST['username']; 
    $email = $_POST['email']; 
    $id = $_POST['id']; 
    $pass = pass_gen(10); 

    $userData['uName'] = $username; 
    $userData['uEmail'] = $email; 
    $userData['uFid'] = $id; //facebook ID 
    $userData['uPassword'] = $pass; 
    $userData['uPasswordConfirm'] = $pass; 

    $create_user_row = UserInfo::register($userData); //create user in my DB 
    if (is_object($create_user_row)) { 
        $u = new User; 
        $u->loginByUserID($create_user_row->getUserID()); //login to my website system using created user object if success. 
} 
    //password generator 
    function pass_gen($length) 
     { 
      $random= ""; 

      srand((double)microtime()*1000000); 

      $data = "AbcDE123IJKLMN67QRSTUVWXYZ"; 
      $data .= "aBCdefghijklmn123opq45rs67tuv89wxyz"; 
      $data .= "0FGH45OP89"; 

      for($i = 0; $i < $length; $i++) 
      { 
       $random .= substr($data, (rand()%(strlen($data))), 1); 
      } 

      return $random; 
     } 

流量: 1.用戶點擊Facebook的登錄 1.1檢查是用戶登錄Facebook 2.2檢查權限A sked 1.獲取用戶數據並通過ajax發送到do_reg.php 2.基於POST數據在數據庫中創建新用戶 3.使用創建的對象將用戶登錄到網站系統。

所以問題是如果用戶沒有登錄到我的網站,但他已經通過Facebook在網站上創建帳戶當他點擊使用現有帳戶登錄Facebook時如何登錄他?

通過Facebook帳號? 我想我失去了某種流動。

回答

0

實際上,您不必手動處理用戶的登錄狀態。面向JavaScript的Facebook SDK自動處理訪問令牌存儲和登錄狀態跟蹤,因此使用它的應用程序無需創建自己的機制,這就是使用JavaScript SDK for JavaScript的關鍵。 login documentation將幫助您瞭解實際應該如何完成。

但是,您可以將一些用戶信息存儲在數據庫中供您自己參考。

0

我的問題是當用戶(已經在我的網站上註冊了 Facebook)如何登錄他?只使用他的Facebook ID?但如果是的話, 是其他人知道我的Facebook ID,他可以登錄?

正如Rahil所說,由於您使用的是FBLogin,因此您不需要重新構建Login機制。一旦在你的應用程序中的FB登錄按鈕,用戶點擊後,JS代碼將檢查用戶的狀態和FB將返回以下狀態值,

**connected**. The person is logged into Facebook, and has logged into your app. 
**not_authorized**. The person is logged into Facebook, but has not logged into your app. 
**unknown**. The person is not logged into Facebook, so you don't know if they've logged into your app 

的用戶流量會是這樣,

1)第一次用戶訪問您的網站,並點擊按鈕FB

2)現在FB檢查用戶登錄到Facebook或不

If the user is already logged in then FB check user already authorised or not 

    If not then FB shows the auth dialog 

    User accepts your permissions then Fb direct to your website 

    Now FB will return "connected" status. During this time add on entry in your table about the new user 

3)第二次當用戶訪問您的網站並點擊FB登錄,

Now you will get the connected response from FB, then check your db table, If the user is a new user or already a member by checking into your table for an entry. 
+0

謝謝您的回覆。據我所知,Facebook處理登錄處理,但我需要的只是Facebook用戶信息和基於他的信息在我的網站上創建本地帳戶。 所以我想這樣。 1. JS sdk詢問權限並檢查登錄狀態 2. PHP檢查用戶活動seeion爲我的應用程序//不發送任何數據通過ajax並讓它處理這個Facebook。 3.基於PHP SDk給出的信息創建本地帳戶和本地登錄//所以從這poitn我不在乎如果用戶在Facebook登錄。 – Froxz

+0

我知道這是一個有點怪異的地方,但我有一些工作人員要處理本地帳戶。 – Froxz