sfOpenIDPlugin がバグってて困った
Symfony で OpenID を使う時は sfOpenIDPlugin
・・・らしいので、早速追加した。symfony plugin-install http://plugins.symfony-project.com/sfOpenIDPlugin
これでプラグインフォルダにインストールされた。設定ファイルをいろいろいじる
#settings.ymlall:
.settings:
enabled_modules: [default, sfOpenIDAuth]
sfOpenIDAuthを有効にする。#routing.yml
openid_siginin:
url: /openid/siginin
param: { module: sfOpenIDAuth, action: signin }
openid_finishauth:
url: /openid/finish
param: { module: sfOpenIDAuth, action: finish }
BasesfOpenIDAuthActions クラス内に '@openid_finishauth' の記述があるから、openid_finishauth は必ず用意する必要がありそう。actions.class.php をいじくる
For example:にあるように、actions.class.php ファイルを書き換えたりする。この場合、$openid に格納される文字列がユーザを指し示すユニークな文字列(OpenID)になる。
// do something
↑のところに、認証後の処理(セッション関連など)を追加すればほとんど終わり。あとは、テンプレートとかエラー処理とか、細かいとこを地道にやるだけ。テストしてみる
/openid/siginin に対して、POSTで 'openid_url' を投げるだけで、あとは勝手に処理してくれる。便利です。・・・と思ったんだけど、認証失敗した。
間接的なOpenIDだと認証に失敗する
間接的なOpenIDってのはコレのこと→自分のサイトURLをOpenIDに設定するどうやら、リクエストの際に openid_url_identity がうまく書き換わっていない模様なので、sfOpenID.class.php の getRedirectURL関数を修正する。[v1.0.0 2007/09/18 現在]
修正前:
public function getRedirectURL()
{
$params = array();
$params['openid.return_to'] = urlencode($this->approved_url);
$params['openid.mode'] = 'checkid_setup';
$params['openid.identity'] = urlencode($this->openid_url_identity);
$params['openid.trust_root'] = urlencode($this->trust_root);
return $this->getOpenIDServer() .'?'. $this->arrayToQueryString($params);
}
修正後:
public function getRedirectURL()
{
$server = $this->getOpenIDServer();
$params = array();
$params['openid.return_to'] = urlencode($this->approved_url);
$params['openid.mode'] = 'checkid_setup';
$params['openid.identity'] = urlencode($this->openid_url_identity);
$params['openid.trust_root'] = urlencode($this->trust_root);
return $server .'?'. $this->arrayToQueryString($params);
}
--他のプラグインも、もっと調べてみよう。
About this entry
Title
Archive type
Individual archive
Published
2007/09/18 18:44
0 Comments