2013-11-21 235 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