1

このチュートリアルに従って、ログイン後の最後のページへのリダイレクトを設定しました: http://www.reecefowell.com/2011/10/26/redirecting-on-loginlogout-in-symfony2-using-loginhandlers/

私のservices.yml

parameters:
    assinatura_user_security.component.login_success_handler.class: Assinatura\UserBundle\Component\LoginSuccessHandler

services:
     assinatura_user_security.component.login_success_handler:
        class:  %assinatura_user_security.component.login_success_handler.class%
        arguments:  [@service_container, @router, @security.context]
        tags:
            - { name: 'monolog.logger', channel: 'security' }

security.yml

form_login:
                login_path: usuario_login
                check_path: usuario_login_check
                success_handler: assinatura_user_security.component.login_success_handler

私のクラス:

<?php

namespace Assinatura\UserBundle\Component;

use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Router;

class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface
{

    protected $router;
    protected $security;

    public function __construct(Router $router, SecurityContext $security)
    {
        $this->router = $router;
        $this->security = $security;
    }

    public function onAuthenticationSuccess(Request $request, TokenInterface $token)
    {

        $referer_url = $request->headers->get('referer');

        $response = new RedirectResponse($referer_url);


        return $response;
    }

}

そしてエラー:

キャッチ可能な致命的なエラー: Assinatura\UserBundle\Component\LoginSuccessHandler::__construct() に渡される引数 1 は、Symfony\Component\Routing\Router のインスタンスである必要があり、指定された appDevDebugProjectContainer のインスタンスであり、/var/www/assinatura/app/cache で呼び出されます/dev/appDevDebugProjectContainer.php の 131 行目で、/var/www/assinatura/src/Assinatura/UserBundle/Component/LoginSuccessHandler.php の 18 行目に定義されています

私のsymfonyのバージョンは2.2です

ログインしていないときに同じページにリダイレクトしたい

4

2 に答える 2

3

services.ymlこれをからarguments: [@service_container, @router, @security.context]に変更してみてくださいarguments: [@router, @security.context]

services:
     assinatura_user_security.component.login_success_handler:
        class:  %assinatura_user_security.component.login_success_handler.class%
        arguments:  [@router, @security.context]
        tags:
            - { name: 'monolog.logger', channel: 'security' }
于 2013-03-29T08:23:50.367 に答える
0

私はこの解決策を見つけました(2.1の新機能)

frontend:
            pattern:        ^/*
            provider:       usuarios
            anonymous:      ~
            form_login:
                login_path: usuario_login
                check_path: usuario_login_check
                use_referer:        true
            logout:
                path:       usuario_logout
            remember_me:
                key:        userassinatura2013
                lifetime:   604800 

ログイン後のリダイレクトで使用されるように設定された「use_referer」

于 2013-04-03T04:19:04.233 に答える