【问题标题】:symfony2 authenticationsymfony2 认证
【发布时间】:2012-10-04 10:10:31
【问题描述】:

我想针对数据库创建SF2身份验证,我使用了SF2的官方文档http://symfony.com/doc/2.0/cookbook/security/entity_provider.html,问题是检查不起作用,我不知道方法,我没有得到任何错误,输入用户信息后,我仍然在同一页面/登录,没有错误,我真的不明白。

security.yml

security:
encoders:
  TEST\UserBundle\Entity\User:
    algorithm: sha512
    encode-as-base64: true
    iterations: 10


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

providers:
    main:
        entity: { class: TESTUserBundle:User, property: username }

firewalls:
    login:
        pattern: ^/(login|reset|accueil)
        anonymous: true
    main:
        pattern: /.*
        form_login:
            check_path: /check_login
            login_path: /login
        logout:
            path: /logout
            target: /login
        security: true
        anonymous: false

access_control:
    #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
    #- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
    #- { path: ^/admin, roles: ROLE_ADMIN }

问题是错误总是空的,这是我的登录表单

            {% if error == 1 %}
        <span class="pw-alert">E-mail et/ou mot de passe erroné(s)</span>
        {% endif %}
                <form action="{{ path('_security_check_user') }}" method="POST">
    <div>
        <label for="username">Username:</label>
        <input type="email" id="username" name="_username" value="{{ last_username }}" />
    </div>

    <div>
        <label for="password">Password:</label>
        <input type="password" id="password" name="_password" />
    </div>
                    <input type="submit" value="Se connecter" name="login"/>
                </div>

            </form>

【问题讨论】:

    标签: database security symfony


    【解决方案1】:

    check_path 应该是 /login_check 而不是 /check_login(对我有用)。 对于提供者,请尝试以这种方式指示您的类:TEST\UserBundle\Entity\User(由于您想从数据库中记录它们,因此您必须提供用户实体的路径,而不是用户控制器)。并将provider: main 添加到您的主防火墙。

    有帮助吗?

    【讨论】:

    • 我更改了 /check_login (实际上,如果您在 check_path 中指出它,我认为它可以工作),我已将提供者的类从 TESTUserBundle:User 更改为 TEST\UserBundle\Entity\User 但它没有工作,问题仍然存在,最后一部分将 provider: main 添加到你的主防火墙我没明白,你能解释一下吗:p
    • 通常你必须向你的防火墙提供它必须使用的供应商声明,在你的情况下它是主要的供应商(你声明你的实体类)你也可以向我们展示你的用户实体和你的树枝登录形式?你添加了 {{ error.message }} 吗?如您所见:symfony.com/doc/2.0/book/…
    • 是的,已经添加了错误消息,并且它确实工作它始终为空,
    • 我已经编辑了我的问题以便澄清,实体用户在官方文档中是相同的
    • 你能在文档中这样吗:{% if error %}&lt;div&gt;{{ error.message }}&lt;/div&gt;{% endif %} 它会向你显示真正的错误(如果有的话),对于你的登录控制器,你是否也使用了官方文档之一? (参考我之前的链接)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2016-01-21
    相关资源
    最近更新 更多