2014-10-06 49 views
-1

我想要什麼? 我想在MVC如何使用PHP SDK v4在MVC中進行Facebook登錄?

合適的Facebook登錄我的目錄樹(簡體):

index.php 
/controllers 
    /users.class.php 
/core 
    /libs 
     /facebook-sdk (contains Facebook SDK files) 
/models 
    /user.class.php 
/views 
    /login.php 
    /user 
     /index.php 

我的問題: 我知道如何使一個文件的Facebook登錄,我知道如何在MVC中創建表單登錄,但我是Facebook PHP SDK Framework的新手。

我的一個頁面代碼(簡體):(?除了登錄按鈕)

// Autoload the required files 
require_once(ROOT.'core/libs/facebook-sdk/autoload.php'); 
use Facebook\FacebookSession; 
use Facebook\FacebookRedirectLoginHelper; 
... 

// Initialize the SDK 
FacebookSession::setDefaultApplication('APP_ID', 'APP_SECRET'); 

// Create the login helper 
$helper = new FacebookRedirectLoginHelper('REDIRECT_URL'); 

// Check if existing session exists 
if (isset($_SESSION) && isset($_SESSION['fb_token'])) { 
    // Create new session from saved access_token 
    $session = new FacebookSession($_SESSION['fb_token']); 
    // Validate the access_token to make sure it's still valid 
    try { 
     if (! $session->validate()) { 
      $session = null; 
     } 
    } catch (Exception $e) { 
     // Catch any exceptions 
     $session = null; 
    } 
} else { 
    // No session exists 
    try { 
     $session = $helper->getSessionFromRedirect(); 
    } catch(FacebookRequestException $ex) { 
     // When Facebook returns an error 
    } catch(Exception $ex) { 
     // When validation fails or other local issues 
     echo $ex->message; 
    } 
} 

// Check if a session exists 
if (isset($session)) { 
    // Save the session 
    $_SESSION['fb_token'] = $session->getToken(); 
    // Create session using saved token or the new one we generated at login 
    $session = new FacebookSession($session->getToken()); 
} else { 
    // No session 
    // Get login URL 
    $loginUrl = $helper->getLoginUrl(); 
    echo '<a href="' . $loginUrl . '">Log in</a>'; 
} 

如果我指的是我的MVC的理解,我必須把所有這些代碼在FacebookAuth功能的控制器?我是否需要在我的所有應用程序中包含Facebook SDK?或只是爲了登錄?

感謝您提前

+0

控制器的責任是根據用戶輸入改變模型層的狀態。所以......你究竟如何得出結論:*「將所有代碼放在控制器中的FacebookAuth函數中」*是否合適? – 2014-10-06 08:45:44

+0

我知道這是不恰當的,這就是爲什麼我要求幫助 – CDO 2014-10-06 09:13:17

+0

您可能會發現[this](http://stackoverflow.com/a/9685039/727208)有用。驗證用戶的方式不應受身份驗證表單的影響。 – 2014-10-06 10:20:20

回答

-1

你的問題是關於只有一個特例,但真正的問題是你不明白MVC不夠好。我建議你閱讀一篇解釋MVC的文章。如果你沒有任何好的理由,你也應該使用現有的MVC框架。這些框架阻止你重新發明輪子。

MVC簡稱: (M)奧德爾負責你的數據, (C)ontroller負責處理該數據(例如轉換,檢查,..), (V)IEW只是一個視圖,你的控制器應該爲你的視圖提供數據。

在你的情況下,這意味着檢查令牌和從Facebook SDK中檢索loginUrl的邏輯是你的控制器的響應性。顯示登錄網址必須由您的查看完成。

+0

這也恰恰是**你**不瞭解MVC。 – 2014-10-06 08:58:29

+0

你只是想說'不'或提供一些'爲什麼'? – Boyd 2014-10-06 09:06:07

+0

「在你的情況下,這意味着檢查令牌和從Facebook SDK檢索loginUrl的邏輯是你的控制器的響應能力。顯示登錄URL必須由你的視圖完成。」我確切地說,在我的問題中,但我認爲這是錯誤的方式 – CDO 2014-10-06 09:10:57