Ich habe mich auch gefragt worden, wie eine Server-Seite Anmeldung mit dem HWIOAuthBundle zu implementieren. Ich fand keine Lösung auf dem Netz, so codierte ich die functionnality basierend auf Hinweisen die ich im Internet gelesen habe. Grundsätzlich , müssen Sie:
- die Benutzer auf Ihrer Anwendung authentifizieren
- machen eine HTTP-Anfrage an den Server mit den Facebook-Token.
- Auf der Server-Seite, überprüfen Sie, ob der Token für Ihre Facebook-App ist, und rufen Sie die Facebook-ID des Benutzers ab.
- Ermitteln Sie anhand der abgerufenen ID Ihren Benutzer aus der Datenbank.
Hier ist mein Symfony-Controller:
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.
}
Ich werfe die Symfony \ Component \ HttpKernel \ Exception \ AccessDeniedHttpException Ausnahmen Login Fehler auf meiner app zu behandeln.
Natürlich sollten Sie wirklich http s verwenden, weil Sie sinnvolle Informationen austauschen werden.
Ich weiß nicht, ob es der beste Weg ist, es zu tun, aber es funktioniert gut. Hoffe es hilft!
Derzeit genau das gleiche Problem - haben Sie das gelöst? Wenn ja, wie hast du das gelöst? Kann nirgendwo etwas finden! – iLikeBreakfast
Ja. Niemand weiß, wie es wirklich funktioniert. Ich meine, Sie können leicht Datenbankauthentifizierung durchführen und von dort sind Sie golden. Aber es ist viel zu kompliziert, um etwas benutzerdefiniertes zu tun (wie LDAP, wenn anonyme Bindung nicht erlaubt ist). Und es ist wirklich traurig, weil alles andere über den Rahmen schön ist. – DinoAmino
Dies liegt daran, die „Code“ param soll ein Berechtigungscode nicht ein Zugriffstoken sein ... Der Token Zugriff tatsächlich die Antwort auf diese Anforderung sein. Aber ich stecke auch fest, ich möchte einen Autorisierungscode vom Frontend bekommen, damit ich zurück in den HWIOauth-Prozess kommen konnte. – TrtG