2016-04-04 9 views
3

私は自分の問題を説明します。ユーザー名と暗号化されたパスワードを渡すAPIを使用してユーザーにログインしているため、ユーザー名だけでユーザーを読み込めません。symfonyでカスタムのRemember meプロバイダを作成する方法

GUARDを使用してユーザーの詳細を取得し、特定のファイアウォールのユーザーを認証しています。ここまでは順調ですね。

私の問題は、私が私を覚えていることを有効にしたいときに始まります。明らかに、ユーザーが自分のデータベースに保存されていないので、覚えている人は名前でユーザーを読み込めません。

現時点では、RememberMeServicesInterfaceクラスを実装する問題を克服し、AbstractFormLoginAuthenticatorを拡張するガードクラスで新しいクラスを使用しています。

私に正直言って、これを行うにはもっと良い方法が必要であると確信しているので、ハックのように感じます。私はsymfonyはRememberMeServiceInterface、TokenBasedRememberMeServicesとPersistentTokenBasedRememberMeServicesを実装する2つのクラスを持っていることに気づいたコードを確認する

は、誰かが私も私のRememberMeService注入し、私のユーザーを認証するためにそれを使用できる方法を私に説明できますか?

事前にコミュニティにお問い合わせいただきありがとうございます。

答えて

6

私は最終的に私を覚えてカスタムを達成する方法を見つけました。 これらの手順は次のとおりです。

1)のSymfony \バンドル\ SecurityBundle \依存性の注入\セキュリティ\工場\ RememberMeFactory

このクラスはカスタムキーでのgetKey()をオーバーライドして、(作成)ので、私を拡張するクラスを作成します。私自身のトークンサービスsecurity.authentication.rememberme.services.MYCUSTOMTOKENSERVICE

2)のSymfony \コンポーネント\セキュリティを拡張トークンサービスを作成を注入することができます\のHttp \リメンバー・ミー\ TokenBasedRememberMeServices私は私の認証ロジックと私のカスタムUserProviderを使用することができるように、機能

3)私のサービスYMLファイル

customlistener.security.authentication.listenerで一緒にバインドします\のHttp \リメンバー・ミー\ ResponseListener

4)のSymfony \コンポーネント\セキュリティを拡張して、リスナーの作成: クラス:### ## 公共:偽

security.authentication.rememberme.services.customtokenservice: クラス:### 親: "security.authentication.rememberme.services.abstract" 抽象的:真

5)security.ymlではgetKeyで使用した文字列を使用して、リスナー固有のRemember-Meキーのオプションを呼び出すことができます

チャームのように機能しました!

+0

ありがとうございます。これをGuardの実装と結びつけることができましたか? –

+0

@DebreczeniAndrásあなたはsoipoと似たようなことをやろうとしましたか?私はこれが実用的な解決策であれば答えを知ることに興味があります – Christian

+0

@Christianいいえ、まだです。私は最近、symfony 2.8にアップグレードすることができました。だから、Guardを使ってまだ手に入れることはできませんでした。私は解決したらすぐに私の解決策を投稿するようにしたいと思います。 –

関連する問題