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