登录表单提交到login_check路由时的状态302

时间:2016-01-31 23:28:25

标签: symfony

晚上好,

我最近安装了symfony3,这意味着我创建了我的用户实体,加载了用户fixtures,在安全配置文件中设置了firewall / provider / form_login条目,以及实现了一个安全控制器来处理/ login路由。

我现在正试图使用​​嵌入SF的身份验证机制登录应用程序。

点击for r := (Request{}); r.err == nil; r.id++ { r.line, r.err = input.ReadSlice(0x0a) channel <- r } 时,我会被重定向到/,并且正在按预期呈现登录表单。但在通过post方法提交(到/login)后,SF回复302并将我重定向回登录表单。

SF应该处理

/login_check路由吗?所以我预计会出现一些异常,但是没有一个例外。

this thread中开悟是一个防火墙问题,但它没有帮助我。

我的安全配置文件:

/login_check

有人可以帮我指出我的安全配置有什么问题吗? (或其他任何事情......)

谢谢!

2 个答案:

答案 0 :(得分:1)

使用Symfony 3.1.0-DEV

我可以保证你可以定义«/ login»&amp; «login_check»在SecurityController中作为注释路由。

唯一的要求是:

  • 必须匿名提供/login网址,可以为此创建特殊防火墙
  • /login_check必须受到安全防火墙的保护

所以这是我的配置

# app/config/routing.yml
app:
    resource: "@AppBundle/Controller/"
    type:     annotation
# Security
logout:
    path: /logout

我的security.conf

firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    login:
        pattern:   ^/login$
        anonymous: ~
    secured:
        pattern: ^/
        anonymous: false
        provider: ent_provider
        form_login:
            login_path: login
            check_path: login_check
        logout:
            path:   /logout
            target: /login

然后可以将login和login_check路由声明为注释,但只需在控制器内部实现loginAction(如文档中所述)

/**
 * @Route("/login", name="login")
 */
public function loginAction(Request $request)
{
    $authenticationUtils = $this->get('security.authentication_utils');

    // get the login error if there is one
    $error = $authenticationUtils->getLastAuthenticationError();

    // last username entered by the user
    $lastUsername = $authenticationUtils->getLastUsername();

    return $this->render(
        'AppBundle::security/login.html.twig',
        array(
            // last username entered by the user
            'last_username' => $lastUsername,
            'error'         => $error
        )
    );
}

/**
 * @Route("/login_check", name="login_check")
 */
public function loginCheckAction()
{
    // this controller will not be executed,
    // as the route is handled by the Security system
    throw new \Exception('Which means that this Exception will not be raised anytime soon …');
}

我花了好几天试图找出这些问题,我希望这会为你们中的一些人节省时间,因为我:o

答案 1 :(得分:0)

SF无法完全处理/ login_check路由。您必须指定此路线:

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    AlarmController al=new AlarmController(this);
    al.StartAlarm();

}

docs中所述。