2

私の security.yml は次のとおりです。

jms_security_extra:
    secure_all_services: false
    expressions: true

security:
    encoders:
        Taden\MainBundle\Entity\Employee:   
            algorithm: sha512
            iterations: 2
            encode_as_base64: true

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        main:
            entity: { class: Taden\MainBundle\Entity\Employee, property: code }

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

        login:
            pattern:  ^/login$
            anonymous: ~

        secured_area:
            pattern:    ^/
            form_login: ~
            logout:
                path:   /logout
                target: /login
            http_basic: ~
            anonymous: ~

    access_control:
      - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
      - { path: ^/admin, roles: ROLE_ADMIN }
      - { path: ^/, roles: ROLE_USER }

私の loginAction() は次のとおりです。

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);
    }

    if ($error != null) 
    {
        $error_message = $this->get('translator')->trans($error->getMessage());
        $this->get('session')->getFlashBag()->add('error', $error_message);            
    }

    if ($this->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY'))
    {
        return $this->redirect($this->generateUrl('menu'));
    }
    else
    {
        $this->get('session')->getFlashBag()->add('error', 'not logged in'); 
    }

    return $this->render('TadenMainBundle:Default:login.html.twig', array(
        'company_name' => '',
        'department_name' => '',
        'user_name' => '',
        'last_username' => $session->get(SecurityContext::LAST_USERNAME),
    ));
}

ローカルホストでは問題なく動作します。資格情報が正しい場合、運用サーバーのログイン ページが再度表示されます。データベース接続が問題なく動作していることを確認しました。問題は isGranted('IS_AUTHENTICATED_FULLY') が false を返すことです。使っても役に立たない

<input type="hidden" name="_target_path" value="/menu" />

login.html.twig で。問題を解決するために誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

1

クラス Taden\​​MainBundle\Entity\Employee は EquatableInterface を実装する必要があります

メソッドは次のようになります

public function isEqualTo(UserInterface $user)
{
    return $this->id === $user->getId();
}
于 2016-03-02T00:36:39.137 に答える