【问题标题】:Symfony 3 does not set remember me cookieSymfony 3 没有设置记住我的 cookie
【发布时间】:2017-07-18 18:20:30
【问题描述】:

我正在关注How to Add "Remember Me" Login Functionality,这应该是直截了当的,但不是这样。

我还检查了this question 等。

我检查了登录表单是否正确地发布了 _remember_me 字段,但 Symfony 不知何故没有拦截它并创建 cookie。

我参加了我相信设置 cookie 的课程,/vendor/symfony/src/Symfony/Component/Security/Http/RememberMe/TokenBasedRememberMeService.php,但那里似乎什么都没有发生。我试图 var_dump 或在会话变量上放置一些构建 cookie 的参数,但无济于事。

这样的登录工作正常。

我正在使用 Guard Authenticator。

代码如下:

security.yml

security:
encoders:
    UsedBundle\Entity\User: 
        algorithm: bcrypt
providers:
    db_provider:
        entity:
            class: UsedBundle:User
            property: email
            manager_name: used

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

    main:
        anonymous: ~
        provider: db_provider
        form_login: 
            login_path: /
            username_parameter: _email
            check_path: /login_check
            use_referer: true
        guard:
            authenticators:
                - app.form_login_authenticator 
        logout:
            path:   /logout
            target: /
        remember_me:
            secret: '%secret%'
            secure: false #change this to true if HTTPS
access_control:
    - { path: ^/admin, roles: ROLE_ADMIN }
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }

登录表单:

{% if error is defined and error is not null %}
{{ dump(error) }}

<div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% else %}
<form action="" method="post" name="login_form" id="login_form" >
    <div class="contact" >
        <input type="email" id="email" name="_email" class="form-control" placeholder="e-mail" value="{% if last_username is defined %}{{ last_username }} {% endif %}" />
    </div>
    <div class="contact" >
        <input type="password" id="password" name="_password" placeholder="mot de passe" />
    </div>
    <div id="captcha_signup"></div>
    <div id="remember_me">
        <label for="remember">Se souvenir de moi </label>
        <input type="checkbox" id="remember_me" name="_remember_me" />
        <p id="a_recovery">mot de passe oubliée?</p>
    </div>
    <div>
        <button type="submit" class="sub_ok btn" name="submit" >Valider</button>
    </div>
</form>  
{% endif %}

【问题讨论】:

    标签: php symfony cookies remember-me


    【解决方案1】:

    扩展AbstractGuardAuthenticatorAbstractFormLoginAuthenticator 的自定义身份验证器需要return true; in supportsRememberMe()

    public function supportsRememberMe()
    {
        return true;
    }
    

    如果您的代码中已经包含此内容,请在您进入登录页面并点击提交按钮时分享您的完整身份验证器实现和 dev.log 的输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多