登录成功后,Silex default_target_path不工作



我有一个重定向成功登录后的问题。

App.php文件(部分):

<?php
use SilexApplication;
/** ... */
use SymfonyComponentSecurityCoreEncoderPlaintextPasswordEncoder;
$app = new Application();
/** ... */
$app['security.encoder.digest'] = $app->share(function ($app) {
    return new PlaintextPasswordEncoder();
});
$app['security.firewalls'] = array(
    'secured' => array(
        'pattern' => '^/admin/',
        'form' => array(
            'login_path' => '/login',
            'check_path' => '/admin/login_check',
            'default_target_path' => '/admin/news',
            'always_use_default_target_path' => true,
        ),
        'logout' => array(
            'logout_path' => '/admin/logout',
        ),
        'users' => array(
            'admin' => array('ROLE_ADMIN', 'test'),
        ),
    ),
);

我的controller .php文件:

<?php
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
$app->get('/login', function(Request $request) use ($app) {
    return $app['twig']->render('login.html.twig', array(
        'error' => $app['security.last_error']($request),
        'last_username' => $app['session']->get('_security.last_username'),
    ));
});
$app->get('/admin/news', function(Request $request) use ($app) {
    if ($app['security.authorization_checker']->isGranted('ROLE_ADMIN')) {
        echo 'admin';
    }
});

我登录了(通过正确的登录数据的形式后),我可以访问/admin/news路由,但我必须手动去那个地址。我想在成功登录后自动重定向到那里。现在我停留在/登录页面。当我将default_target_path更改为'http://google.com'时,它可以正常工作。

我使用homestead (vagrant)与nginx。1.3.0 Silex版本。

有效的解决方案(或者更确切地说是变通方法)是:

  • change 'default_target_path' to '/admin';
  • 添加新路由:

    $app->get('/admin', function() use ($app) { return $app['twig']->render('admin/loggedIn.html.twig'); });

  • admin/loggedIn.html.twig模板我添加了js重定向到admin/news

我不知道为什么它不工作。如果有人知道-请留下评论

相关内容

  • 没有找到相关文章

最新更新