Closed freekmurze closed 11 years ago
Hi,
I've just tested the following that works fine:
<?php
/**
* php -S localhost:8080 -t demo.php
* Go to http://silex.dev:8080/secured/me
*/
require __DIR__ . '/vendor/autoload.php';
$app = new Silex\Application();
$app->register(new Silex\Provider\SessionServiceProvider());
$app->register(new Silex\Provider\SecurityServiceProvider());
$app->register(new Silex\Provider\FacebookServiceProvider());
$app['facebook.config'] = array(
'appId' => '<appId>',
'secret' => '<secret>',
);
$app['facebook.permissions'] = array('email');
$app['security.firewalls'] = array(
'private' => array(
'pattern' => '^/admin/',
'facebook' => array(
'check_path' => '/admin/login_check',
// 'login_path' => '/login',
//'entry_point' => true,
),
'users' => array(
'<myid>' => array('ROLE_USER', null),
),
),
);
$app->get('/admin/me', function () use ($app) {
$user = $app['facebook']->api('/me');
return 'Welcome ' . $user['name'];
});
$app->run();
If the user id or the facebook credentials are incorrect, there is effectively no error message and you are redirected to the /login page.
I tried to run your example (I remove all my own code for the application) and I still get the error. The redirect to Facebook works, when I return from Facebook a "NotFoundHttpException" is thrown. This is the entire error:
Sorry, the page you are looking for could not be found.
2/2NotFoundHttpException: No route found for "GET /login"
in
My index.php
ini_set("display_errors", 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../vendor/autoload.php';
$app = new Silex\Application();
$app['debug'] = true;
$app->register(new Silex\Provider\SessionServiceProvider());
$app->register(new Silex\Provider\SecurityServiceProvider());
$app->register(new Silex\Provider\FacebookServiceProvider());
$app['facebook.config'] = array(
'appId' => '<app id>',
'secret' => '<app secret>',
);
$app['facebook.permissions'] = array('email');
$app['security.firewalls'] = array(
'private' => array(
'pattern' => '^/admin/',
'facebook' => array(
'check_path' => '/admin/login_check',
// 'login_path' => '/login',
//'entry_point' => true,
),
'users' => array(
'<my own facebook id>' => array('ROLE_USER', null),
),
),
);
$app->get('/admin/me', function () use ($app) {
$user = $app['facebook']->api('/me');
return 'Welcome ' . $user['name'];
});
$app->run();
My composer.json
{
"require": {
"silex/silex": "1.0.*@dev",
"symfony/form" : "2.1.*",
"twig/twig": ">=1.8,<2.0-dev",
"symfony/twig-bridge": "v2.2.1",
"symfony/translation": "~2.1",
"symfony/validator": "~2.1",
"symfony/config": "2.2.x-dev",
"doctrine/dbal": "2.3.3",
"swiftmailer/swiftmailer": "4.1.7",
"guzzle/guzzle": "dev-master",
"grom/facebook-service-provider": "dev-master"
}
}
Found the solution.
It turns out that my .htaccess url rewrite did not send the get-parameters to index.php
Changing RewriteRule (.*) /index.php?param=$1 [L]
to RewriteRule (.*) /index.php?param=$1 [QSA,L]
fixed the problem
Great! Thanks for the feedback. I've just opened a PR on Silex doc for that.
Hi,
i'm have troubles integrating this component. Could you please provided a more detailed example on how to integrate this in silex?
I'm trying to secure the /admin-area. Users should login via facebook.
Right now I have this in my index.php.
In my facebook app i've added/admin/logincheck as my site url.
When loggin in on facebook, I get redirect back to my domain, but then I get an errormessage that the route /admin/logincheck/ is not defined.
When I define that route an extra redirect is performed to /login/.
When I define /login, the browser gets stuck in a redirectloop.
I have these questions:
Could you please make an example in which these questions are answered. I'm sure that other silex beginners will benefit from this as well.