0

私のプロジェクトのインデックス ページを、その下に登録用のリンクがあるログイン フォームにしたいのですが、ログに記録されていない訪問者は、 route を使用したログイン フォームと route/を使用した登録ページのみを表示できる必要があります/register。ログが route でホームページにリダイレクトされるようにしたい場合/home。私はいくつかのことを試しましたが、開発環境で動作しています (ただし、ツールバーにはいくつかの問題があります - Symfony2 - 開発環境) が、prod env に切り替えると、ブラウザーは次のように言います: 「ページが正しくリダイレ​​クトされていません。Firefox はそれを検出しました。サーバーは、このアドレスへのリクエストを決して完了しない方法でリダイレクトしています。この問題は、Cookie の受け入れを無効にするか拒否することによって発生する場合があります。」

ここに私のファイルがあります:

security.yml

security:
    encoders:
        EM\MyFriendsBundle\Entity\User:
            algorithm:        sha1
            encode_as_base64: false
            iterations:       1

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER

providers:
    administrators:
        entity: { class: EMMyFriendsBundle:User }

firewalls:
    secured_area:
        pattern:    ^/
        anonymous: ~
        form_login:
            login_path:  /login
            check_path:  /login_check
            default_target_path: /home

access_control:
    - { path: ^/home, roles: ROLE_ADMIN }

ルーティング.yml

login_display:
    pattern: /
    defaults: { _controller: EMMyFriendsBundle:Welcome:display }

login:
    pattern:   /login
    defaults:  { _controller: EMMyFriendsBundle:Welcome:login}

login_check:
    pattern:   /login_check

register:
    pattern: /register
    defaults: { _controller: EMMyFriendsBundle:Welcome:register }

home_display:
    pattern: /home
    defaults: { _controller: EMMyFriendsBundle:Home:display }

WelcomeController.php

<?php

namespace EM\MyFriendsBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;

class WelcomeController extends Controller
{
    public function displayAction()
    {
        $error=null;
        $last_username=null;
        return $this->render('EMMyFriendsBundle:Welcome:login.html.twig', array('error' => $error, 'last_username' => $last_username));
    }

    public function loginAction()
    {
        $request = $this->getRequest();
        $session = $request->getSession();

        // get the login error if there is one
        if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
            $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
        } else {
            $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
            $session->remove(SecurityContext::AUTHENTICATION_ERROR);
        }

        return $this->render('EMMyFriendsBundle:Welcome:login.html.twig', array(
            // last username entered by the user
            'last_username' => $session->get(SecurityContext::LAST_USERNAME),
            'error'         => $error
        ));
    }

    public function registerAction()
    {
         return $this->render('EMMyFriendsBundle:Welcome:register.html.twig');
    }
}

HomeController.php

<?php
namespace EM\MyFriendsBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class HomeController extends Controller
{
    public function displayAction()
    {
        return $this->render('EMMyFriendsBundle:Home:home.html.twig');
    }
}
?>
4

1 に答える 1

4

追加:

    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }.
于 2012-08-23T08:59:53.627 に答える