0

I have a custom user provider, following the guide in:

http://symfony.com/doc/current/cookbook/security/custom_provider.html

すべてエラーなしで動作していますが、制限ゾーンにアクセスできません。

私のUserProviderクラスでは、$rolesvar を設定してarray("ROLE_USER")ルート app/list にアクセスする必要がありますが、app/list に移動すると、Symfony は何度もログインするようにリダイレクトします。

デバッグ ツールバーを確認したところ、次の結果が得られました。

Username    anon.
Authenticated?   yes
Roles   { }
Token class Symfony\Component\Security\Core\Authentication\Token\AnonymousToken

私の security.yml ファイルは次のとおりです。

security:
firewalls:
    secured_area:
        pattern:    ^/
        anonymous: ~
        form_login: ~
        http_basic:
            realm: "Secured Demo Area"
        form_login:
            provider: webservice
            login_path: login
            check_path: login_check
            always_use_default_target_path: true
            default_target_path: listado_actas
        logout:
            path:   logout
            target: login

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

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

providers:
    webservice:
        id: webservice_user_provider

encoders:
    Symfony\Component\Security\Core\User\User: plaintext
    Actas\Gestion\UserBundle\Security\User\WebServiceUser:
        id: my.encoder.service

UserProviderのクラスは次のようになります。XML サービスを呼び出して、TOKEN を my に保存しますUserClass

public function loadUserByUsername($username)
{
    $salt = "";
    $roles = "";
    // make a call to your webservice here

    $password = $this->request->get('_password');
    $xml_interface = new XMLInterfaceBundle();
    $token = $xml_interface->requestLogin($username, $password);

    if (strlen($token) > 10) {
        $roles = array("ROLE_USER");
        $salt  = "";
        return new WebserviceUser($username, $password, $salt, $roles, $token);
    }

    throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username));
}

これは私のものUserObjectですDaoAuthenticationProvider::checkAuthentication()

Actas\Gestion\UserBundle\Security\User\WebserviceUser Object
(
    [username:Actas\Gestion\UserBundle\Security\User\WebserviceUser:private] => 44886706X
    [password:Actas\Gestion\UserBundle\Security\User\WebserviceUser:private] => 44886706XkCrDP
    [salt:Actas\Gestion\UserBundle\Security\User\WebserviceUser:private] => 
    [roles:Actas\Gestion\UserBundle\Security\User\WebserviceUser:private] => Array
        (
            [0] => ROLE_ADMIN
        )

    [my_token:Actas\Gestion\UserBundle\Security\User\WebserviceUser:private] => 
)

これは私のrouting.ymlです:

xml_interface:
    resource: "@XMLInterfaceBundle/Resources/config/routing.yml"
    prefix:   /

actas:
    resource: "@ActasBundle/Resources/config/routing.yml"
    prefix:   /

login:
    pattern:   /login
    defaults:  { _controller: UserBundle:Default:login }

login_check:
    pattern:   /login_check

logout:
    pattern:   /logout
4

1 に答える 1