Что я хочу ?
Я хочу сделать правильный вход на Facebook в MVC
Мое дерево каталогов (упрощенно):
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 во все мои приложения? или только для входа?
Заранее спасибо
Ваш вопрос касается только одного конкретного случая, но реальная проблема в том, что вы недостаточно хорошо понимаете MVC. Я бы предложил вам прочитать статью, объясняющую MVC. Вам также следует использовать существующую инфраструктуру MVC, если у вас нет веских причин не делать этого. Эти рамки не позволят вам заново изобрести колесо.
MVC вкратце:
(M) Одель несет ответственность за ваши данные,
(C) контролер отвечает за обработку этих данных (например, преобразование, проверка, …),
(V) iew — это просто представление, ваш контроллер должен предоставить вашему представлению данные.
В вашем случае это означает, что логика для проверки токена и получения loginUrl из SDK Facebook является вашей контроллеры responibility. Отображение URL логина должно быть сделано вашим Посмотреть.
Других решений пока нет …