Мне также интересно, как реализовать логин на стороне сервера с помощью HWIOAuthBundle. Я не нашел никакого решения в Интернете, поэтому я закодировал функциональность на основе подсказок, которые я читал в сети. В принципе, вы должны:
- аутентификации пользователя на приложение
- сделать запрос HTTP на сервер с маркером Facebook.
- на стороне сервера, проверьте, является ли токен для вашего приложения Facebook, и получите идентификатор пользователя Facebook.
- Получите своего пользователя из БД на основе полученного идентификатора.
Вот мой Symfony контроллер:
public function getSecurityFbAction($token)
{
// Get the token's FB app info.
@$tokenAppResp = file_get_contents('https://graph.facebook.com/app/?access_token='.$token);
if (!$tokenAppResp) {
throw new AccessDeniedHttpException('Bad credentials.');
}
// Make sure it's the correct app.
$tokenApp = json_decode($tokenAppResp, true);
if (!$tokenApp || !isset($tokenApp['id']) || $tokenApp['id'] != $this->container->getParameter('oauth.facebook.id')) {
throw new AccessDeniedHttpException('Bad credentials.');
}
// Get the token's FB user info.
@$tokenUserResp = file_get_contents('https://graph.facebook.com/me/?access_token='.$token);
if (!$tokenUserResp) {
throw new AccessDeniedHttpException('Bad credentials.');
}
// Try to fetch user by it's token ID, create it otherwise.
$tokenUser = json_decode($tokenUserResp, true);
if (!$tokenUser || !isset($tokenUser['id'])) {
throw new AccessDeniedHttpException('Bad credentials.');
}
$userManager = $this->get('fos_user.user_manager');
$user = $userManager->findUserBy(array('facebookId' => $tokenUser['id']));
if (!$user) {
// Create user and store its facebookID.
}
// Return the user's JSON web token for future app<->server communications.
}
я бросить Symfony \ Component \ HttpKernel \ исключения Исключение \ AccessDeniedHttpException обработки ошибок входа в мое приложение.
Конечно, вы действительно должны использовать http s, потому что вы будете обмениваться разумной информацией.
Я не знаю, если это лучший способ сделать это, но он работает хорошо. Надеюсь, это поможет!
В настоящее время глядя на ту же проблему - вы решили это? Если да, то как вы это решили? Ничего не найти! – iLikeBreakfast
Да. Никто не знает, как это работает. Я имею в виду, вы можете легко сделать базу данных, а оттуда вы золотой. Но слишком сложно сделать что-нибудь обычное (например, LDAP, когда анонимная привязка не разрешена). И это очень грустно, потому что все остальное в рамках рамки красиво. – DinoAmino
Это потому, что параметр «code» должен быть авторизационным кодом, а не токеном доступа ... Токен доступа будет фактически ответом на этот запрос. Но я тоже застрял, я бы хотел получить код авторизации с переднего конца, чтобы вернуться в процесс HWIOauth. – TrtG