とあるセクシーなデータ分析官

を目指す渋谷で働くソーシャルゲーム分析者の卵

symfonyでのOPENIDの実装(2)

前回でたエラーを検索して解決できそうな策をやってみる


「サーバーの時刻合わせ」
OPENIDのシステムはタイムスタンプでも使ってるのかな?と思いました。
サーバーの時間は明らかにずれがあったので正確な時間へセット。
http://makky.jp/blog/cat-4/


「OPENSSLのインストール」
mixiやyahooはSSLが利用されているため、
OPENSSLが導入されていないとOPENIDは使えないもようです。
なのでインストールしました。
http://d.hatena.ne.jp/botchy/20080220
http://memorva.jp/memo/linux/openssl.php



この2つの方法によってmixiでもyahooでもオープンIDでログインできるようになりました。



ついでに、OPENIDでログイン後の処理について。

  $response = $consumer->complete('http://'.sfConfig::get("env_host_name").'/openid/finishauth');
    $this->getUser()->setAuthenticated(true);
    $this->getUser()->addCredential('editor');

    //OPENIDのログイン情報を取得して新規登録orログインを行う
    $localid  = $response->identity_url;
    $nickname = $response->message->args->values[8];
    $user = HogePeer::login($localid, $nickname);

    //セッションで値を保持する
    $this->getUser()->setAttribute('id', $user->getId());
    $this->getUser()->setAttribute('nickname', $user->getNickname());


$localidにはユーザー固有の各アカウントのID情報
$nicknameにはmixiではニックネームが入るのでこれを
loginメソッドに渡して、新規か既存ユーザーかのチェックや処理を行う。


そして、ログイン情報を保持するためセッションで値を保持しておく。