9

カスタム認証プロバイダーを正常に実装しましたが、「remember me」機能も追加する必要があり、その方法に関するドキュメントが見つかりませんでした。

これを追加してみました:

remember_me:
    key: "%secret%"
    lifetime: 31536000 # 1 year
    always_remember_me: true

しかし、それはこう言います:

You must configure at least one remember-me aware listener (such as form-login) for each firewall that has remember-me enabled.

これを見つけましたが、使い方がわかりません:Symfony\Component\Security\Core\Authentication\Provider\RememberMeAuthenticationProvider

では、はどこRememberMeAwareInterfaceですか?(あると思いますか?ContainerAwareのように)それでどうすればいいですか?

独自の実装を作成する必要はないと思います。デフォルトの実装は、カスタム認証プロバイダーで正常に動作するはずです。

4

5 に答える 5

5

私が書いたカスタムFacebook認証プロバイダーでも同じ問題が発生していました。解決策は非常に単純でした。

SecurityFactoryInterfaceから拡張するカスタム実装を使用してカスタム認証プロバイダーを実装したと仮定しますSymfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\AbstractFactory。これを行った場合、残りは構成の問題です。

  1. セキュリティ構成で、remember_meファイアウォールの機能を構成します。これをファイアウォールに構成しているとするとpublic、追加された構成パラメーターは次のようになります。

    firewalls:
        public:
            remember_me:
                key:      "%secret%"
                lifetime: 31536000 # 365 days in seconds
                path:     /
                domain:   ~ # Defaults to the current domain from $_SERVER
    
  2. 同じ構成で、認証プロバイダーのremember_me機能を有効にします。publicこれをファイアウォールに構成していて、SecurityFactoryInterface実装のgetKey()メソッドがを返すと仮定するとyourAuthProviderKey、追加された構成パラメーターは次のようになります。

    firewalls:
        public:
            yourAuthProviderKey:
                remember_me:        true
    
  3. 最後に、認証プロバイダーがログインを処理するときは、httpリクエスト_remember_meに値1を指定したhttp GETまたはPOSTパラメーターを指定して、rememberme機能をリクエストしてください。(ただし、セキュリティ構成でデフォルト値を変更した場合、このパラメーターには別の名前が必要になる場合があります。)たとえば、私の場合、認証を処理した後、Facebookに次のURLにリダイレクトするように指示する必要がありましたhttp://www.mydomain.com/auth-callback/?_remember_me=1。(後の部分に注意してください?

お役に立てれば!

于 2013-01-13T14:18:31.983 に答える
2

これをあなたのform_loginセクションに追加しましたか?

form_login:
    remember_me: true
于 2012-10-09T12:44:30.160 に答える
1

Symfony 2.8 から、「キー」は「シークレット」に置き換えられました。したがって、次のようになります。

remember_me:
   secret: %secret%
   lifetime: 31536000

このエラーに遭遇した場合、それが修正です

于 2015-07-08T10:35:02.830 に答える
0

これを試すことができます:

firewalls:                   
    secured_area:
        pattern:    ^/
        anonymous: ~
        form_login:
            csrf_provider: form.csrf_provider
            login_path:  login
            check_path:  login_check
            always_use_default_target_path: true
            default_target_path: /the-cao
            remember_me: true
        logout:
            path: /logout
            target: /
        remember_me:
            key:      "%secret%"
            lifetime: 31536000 # 365 days in seconds
            path:     /
            domain:   ~ # Defaults to the current domain from $_SERVER
于 2014-10-30T04:51:40.143 に答える