考え直さないといけない。
現状のカケラの樹では、OpenIDログイン時に次のような処理をしてる。
- OpenIDがログインフォームに入力され、submitされる
- 入力されたOpenIDがはてな、livedoor、TypeKeyかをチェック
- OpenID providerに認証要求
- 認証が成功して帰ってきた次点で、OpenIDをバラしてサービス名*1とユーザ名*2を取得、ユーザ情報生成
- ユーザページ*3を開く
こうやって、ユーザページのURIに生のOpenIDが出ないようにしてるんだけど、この方法はOpenIDからユーザ名が分かることを前提としてる。今サポートしてるOpenID provider*4は偶然みんなその形だから良かったんだけど、今回Yahoo!が提供を始めたOpenIDはこんな形。
https://me.yahoo.co.jp/a/XXXXXXXXXXXXXXXXXXXXX
XXXXXXX……のところは乱数で生成された文字列だそう。ユーザ名はわからない。けど、OpenIDとしては何の問題もない。そもそもカケラの樹の設計、前提がおかしかったわけ。
だからこういうOpenIDにも対応できるようにするには、ちょっと改修が必要なわけだけどどうすればいいか。方法はいくつか考えられる。
OpenIDをそのままユーザ名として使う
「ようこそ、http://www.hatena.ne.jp/yune_kotomi/さん」という感じ。自サービスでのユーザページのURIは
http://kakera.tarenari.jp/user/show/http://www.hatena.ne.jp/yune_kotomi/
のようにする。
デメリット
- 見た目が悪い
OpenIDとユーザ名の対応を自サービス側で行う
昨日紹介したSpringnoteのように、OpenIDログイン後、初回ログインならスクリーンネームをユーザに聞く。決まったら、以後はその名前で表示とかURIの生成を行う。