2011年3月3日木曜日

web2py , openID,google,Facebookでログイン

非常に強力なwebのフレームです。特にGoogle App Enginesへdeployするには優れています。
Djangoからweb2pyにスイッチしたのはそのためです。

そのusers groupは非常に活発で開発者(Massimo Di Pierro)が直接に回答していること、メンバーに開発者の学生が多いことなどで非常に役に立っています。オンラインドキュメントはよく編集されていて優れています。ドキュメントで分からないこと全部このユーザーグループで検索すればほぼことは足ります。質問しなくても検索すれば大方の問題は解決します。残念ながら英語しかありませんが。

掲題のログインの問題にもどって。

web2pyは完璧な認証システムが備わっています。
さらにjanrain(user management platform for the social web)とのインタフェースがクラス(RPXaccount)として用意されているのでこれをネイティブなログインフォームに代入すればopenID,Google,openIDなどのアカウントでログインできます(janrainは商用サービスですがbasicはfreeです)。
janrainのEngageというプロダクトに好みの名前のドメインを登録するとapi_keyがもらえますから、これをRPXaccountのパラメータにして初期化してネイティブなログインフォームに代入するだけです。

 auth.settings.actions_disabled=['register','change_password','request_reset_password']
auth.settings.login_form = RPXAccount(request, api_key='もらったapi_key',domain='ドメイン',
    url = "http://localhost:8000/%s/default/user/login" % request.application)
最後の行はweb2pyのログインURLです。

これでGoogleやFacebookのアカウントをもった訪問者はログインできます。同時に訪問者の名前やメールアドレスがこちらのサイトのuserテーブルに保存されます。

しかしこのままだと今まで自分のサイトに登録した訪問者がログインできません。
そのためにExtendedLoginFormというクラスが用意されています。
argsにトークンを入れてログインフォームをスイッチできるようにしたものです。
ところがこれがduplicate keywordsになってうまく動きませんでした。
この問題はweb2pyのユーザーグルプに投稿されて解決策がhow to use ExtendedLoginForm ?に掲載されていました。
詳細は省きますが、その結果は次の画面のようになります。
web2pyには幾つかのGoogleなどのログインメソッドが用意されています。まだこれは試していません。janrainは単一のゲートウエイになっているので便利です。








画面の上半分はよそのアカウントでログイン、下半分の会員登録は自分のサイトに登録します。あるいはログインします。

0 件のコメント:

コメントを投稿