ZendFrameworkにもOpenIDを利用するためのコンポーネントが用意されてます。


まずは利用するためのサンプルコード


$id = $_POST['id'];
require_once 'Zend/OpenId/Consumer.php';
$consumer = new Zend_OpenId_Consumer();
if (!$consumer->login($openlogingid)){
    echo 'OpenID 認証に失敗しました。';
}

上記のコードで認証サーバにリダイレクトされます。


そこで認証し、戻ってきたパスで次のコードを実行します。


require_once 'Zend/OpenId/Consumer.php';
$consumer = new Zend_OpenId_Consumer();
if ($consumer->verify($_GET, $id)) {
    echo '認証に成功しました。';
} else {
    echo 'OpenID 認証に失敗しました。'. $id);
}


これで、OpenIDに不正な情報等が含まれていなければ認証が完了です。


ただし、ZendFrameworkのOpenIDのコンポーネントとPHP OpenID Library(POL)とでは認証後のIDの検証方法が違うらしいです。


認証がPOLで成功し、ZendFrameworkで失敗することがあります。


YahooのOpenIDが対象となります。


Yahoo以外ですとOpenID2.0の仕様が失敗している気がします。


処理を確認するとZendFrameworkが失敗する原因は下記のコードにあるようです。



$id = $params['openid_claimed_id'];
if (!$this->_discovery
    ($id, $discovered_server, $discovered_version) ||
    (isset($params['openid_identity']) &&
    $params["openid_identity"] != $id) ||
    (isset($params['openid_op_endpoint']) &&
    $params['openid_op_endpoint'] != $discovered_server) ||
    $discovered_version != $version) {
    return false;
}


verifyメソッドの一番最後のif文ですが、$params["openid_identity"] != $idがtrueになってしまうため、verifyが失敗している模様です。


そもそも、claimed_idにはゴミ情報の#xxxが含まれるから、実際の送信したidentityとは内容が異なるはずなので、必ずここは不一致が成立してしまうような気がします。


ひとまず今はPOLを利用しているのですが、ZendFrameworkのバグでしょうか?


それともOpenID2.0の仕様なのでしょうか?


とりあえずは問題なく動作するライブラリで対処してしまいましょう。


前回クリスタルレポートに動的な値を埋め込む方法を説明しました。


その際にはクリスタルレポートにパラメータを作成しましたが、直接テキストオブジェクトに値をセットする事も可能です。


次がその方法です。


CrystalDecisions.CrystalReports.Engine.ReportDocument report =
    new Report1();
CrystalDecisions.CrystalReports.Engine.TextObject textObject;
textObject = report1.ReportDefinition.ReportObjects["CommentText"];
this.ReportView.ReportSource = report;



そもそも、初めてクリスタルレポートを触った頃はパラメータの存在を知らず上記方法でやってました。


この方法ですと、改行が反映されません。


当時は時間との戦いで、一行あたりに制約を設けて最大5行で各オブジェクトに値を挿入してました。


もっと、線の色を変えたりとかで使うべき技かもしれません。


といっても、クリスタルレポートはデザイナで条件の指定ができるので、この機能を使う事は滅多にないかもしれませんね。

(FedoraCore9の場合)


自分のテスト環境用で、公開等はしない場合等の理由でセキュリティ上rootで直接ログインを可能にしたい場合の設定



# vi /etc/ssh/sshd_config

#PermitRootLogin yes
PermitRootLogin yes
[ESC]:wq

# service sshd restart


でOKです。