sfGuardUserのcookieに保存機能を有効にする



sfGuardUserのパスワードなどを保存するという機能がついていますがFilterを有効にしないと利用ができないことがわかりました。

公式のドキュメントにも書いてあったのですが気づかなかったです。

http://www.symfony-project.org/plugins/sfGuardPlugin

http://d.hatena.ne.jp/innx_hidenori/20100110/1263055498
を見て気づきました。情けない。

filter.ymlに

remember_me:
  class: sfGuardRememberMeFilter

を追加します。編集後のsymfony ccを忘れずに。

あとは
plugins/sfGuardPlugins/lib/sfGuardRememberMeFilter.php
の手直し。
http://trac.symfony-project.org/changeset/32872
を参考に

$q = Doctrine_Core::getTable('sfGuardRememberKey')->createQuery('r')
      ->innerJoin('r.User u')
      ->where('r.remember_key = ?', $cookie);
if ($q->count())
{
   $this->context->getUser()->signIn($q->fetchOne()->User);
}

から

$q = Doctrine_Core::getTable('sfGuardUser')->createQuery('u')
  ->select('u.*')
   ->innerJoin('u.RememberKeys r')
   ->where('u.is_active = ?', true)
   ->addWhere('r.remember_key = ?', $cookie);
if ($q->count()){
  $this->context->getUser()->signIn($q->fetchOne());
}

に書きなおし。テーブルsfGuardRememberKeyは持っていないのでsfGuardUserからsfGuardRememberKeyを参照します。

app.ymlも手直ししておきましょう

all:
  sf_guard_plugin:
    remember_key_expiration_age: 2592000
    remember_cookie_name: myAppRememberMe