JiftyでWebアプリをつくる - ログイン機能を作る

※2008/02/09 Jifty::Plugin::Authentication::Passwordについて追記しました。
こんにちは、Perl担当の西山です。
前回に引き続き、DRY(Don't Repeat Yourself)をとことん追求する
WebフレームワークJiftyの話題です。
今回からJiftyを使ったWebアプリケーションの作り方について書いていこうと思います。
手元の環境にPerlの実行環境やJiftyをインストールしていない方は
前回のエントリーを参照してください。
ログイン機能を付ける
さてサンプルアプリのお題は・・・と考えてみましたが、Jifty自体がRailsを少なからず意識していることもありますし、
本ガイドブログのRubyのエントリーに勝手に(汗;)連動して
パスワード認証によるログイン機能をまずは実装してみようと思います。
Ruby on Railsを使った作り方はこちら を参照して比較してみるのも面白いのでは?
なお、ここでは説明の簡単の為にDBはMySQLではなく標準添付のSQLiteを使用します。
方針:Loginプラグインを利用する
Jiftyの機能拡張として開発されているJifty::Plugin::Loginというプラグインを使用します。Loginプラグインを追加すると、以下の機能が追加されブラウザから利用できるようになります。
- アカウント作成 (/signup)
- ログイン (/login)
- ログアウト (/logout)
- パスワード変更 (/chgpasswd)
- パスワード確認 (/passwordreminder)
ログイン/ログアウト機能だけでなく、アカウント自体の作成やパスワード確認など
アカウント管理全般の機能がセットで用意されます。
Loginプラグインは前回の手順でインストールしたJiftyには入っていない為、別途インストールする必要があります。
前回の記事を参考にしてJifty-Plugin-Loginパッケージを検索してインストールしてください。
※2008/02/05現在PPMのリポジトリに登録されているJifty-Plugin-Loginは、 CPANにアップされているものと比べてバージョンが古い?ようで、 スクリプト起動時に以下のようなエラーメッセージが表示されました。 Undefined subroutine &UNIVERSAL::is called at C:/Perl/site/lib/Jifty/Plugin/Logi n/Model/User.pm line 4. Compilation failed in require at C:/Perl/site/lib/Jifty/Util.pm line 261. BEGIN failed--compilation aborted at C:/Perl/site/lib/Jifty/Plugin/Login/Action/ Signup.pm line 11. Compilation failed in require at C:/Perl/site/lib/Jifty/Util.pm line 261. 少々荒っぽい方法ですが、CPANからモジュールを直接ダウンロードし、 tarボールを展開して、デフォルト設定ではC\Perl\site\lib\Jifty\Plugin配下に インストールされているLoginプラグインを上書きすることで今回はしのぎました。
1.アプリケーションの作成
では、ここからイチからログインプラグインを利用するまでの流れを説明します。まずはヘルパースクリプトを実行してアプリケーションの雛形を作成します。
コマンドプロンプトを開いて、以下のようにjiftyコマンドのappオプションを実行してください。
ここでは"LoginTest"というアプリケーション名で作成します。
C:\tmp>jifty app --name LoginTest Creating new application LoginTest Creating directory LoginTest/lib Creating directory LoginTest/lib/LoginTest Creating directory LoginTest/bin Creating directory LoginTest/etc Creating directory LoginTest/doc Creating directory LoginTest/log Creating directory LoginTest/var Creating directory LoginTest/var/mason Creating directory LoginTest/share Creating directory LoginTest/share/po Creating directory LoginTest/share/web Creating directory LoginTest/share/web/templates Creating directory LoginTest/share/web/static Creating directory LoginTest/lib/LoginTest/Model Creating directory LoginTest/lib/LoginTest/Action Creating directory LoginTest/t Creating configuration file LoginTest/etc/config.yml
2.設定ファイルの編集
生成された雛形の中で、LoginTest\etc\config.ymlがアプリケーション全体の設定ファイルになります。 必要な変更は2点です。
①使用するプラグインを設定
Plugins:
- Login: {}
①メール送信設定 # 確認メールなどの送信者アドレスに使用 AdminEmail: robot@tkrb.jp # メール送信方法を指定。標準のSendmailはWindows環境では利用できない為、 # SMTP(Net::SMTPモジュール)を指定する Mailer: SMTP # Net::SMTPモジュールへの引数を配列のリファレンスで設定 MailerArgs: ['Host', 'SMTPサーバ名']
3.ユーザ情報のModelクラスを作成
ヘルパースクリプトを実行してユーザ情報のModelクラスの雛形を生成します。以下のようにLoginTest\bin\jiftyコマンドのmodelオプションに
Modelクラス名を指定して実行してください。
C:\tmp\LoginTest>perl bin\jifty model --name User Writing file C:\tmp\LoginTest/lib/LoginTest/Model/User.pm Writing file C:\tmp\LoginTest/t/00-model-User.t生成されたUserクラス(LoginTest\lib\LoginTest\Model\User.pm)
use strict;
use warnings;
package LoginTest::Model::User;
use Jifty::DBI::Schema;
use LoginTest::Record schema {
};
# Your model-specific methods go here.
1;
生成されたUserクラスを編集して、Loginプラグインが用意するUserモデルを継承するよう記述します。
編集後のUserクラス(LoginTest\lib\LoginTest\Model\User.pm)
use strict; use warnings; package LoginTest::Model::User; use base qw/Jifty::Plugin::Login::Model::User/; 1;
4.DBをセットアップ
以上の手順でアプリケーションの準備は整いました。 以下のコマンドを実行して、アプリケーションが必要とするデータベースとスキーマを作成します。 このコマンドはスキーマ情報などに変更が無ければ以降は実行する必要はありません。C:\tmp\LoginTest>perl bin\jifty schema --setup INFO - Generating SQL for application LoginTest... INFO - Using LoginTest::Model::User, as it appears to be new. INFO - Using Jifty::Model::Session, as it appears to be new. INFO - Using Jifty::Model::Metadata, as it appears to be new. INFO - Set up version 0.0.1, jifty version 0.71129
5.動作確認
実際にLoginTestアプリケーションを起動してブラウザで動作を確認してみましょう。 LoginTest\bin\jiftyコマンドにserverオプションを渡して実行するとアプリケーションが起動して、 http://localhost:8888/ のURLで確認できます。C:\tmp\LoginTest>perl bin\jifty server DEBUG - Plugin Jifty::Plugin::Login::View added as a Template::Declare root DEBUG - Plugin Jifty::Plugin::Login mason component root added: (C:\Perl\site\li b\auto\Jifty\Plugin\Login/web/templates) INFO - You can connect to your server at http://localhost:8888/
- アカウント作成 http://localhost:8888/signup
- ログイン http://localhost:8888/login
- パスワード変更 http://localhost:8888/chgpasswd
各入力フォームでは入力チェックもしっかり用意されていて、Ajaxでもチェックされます。
また、アカウント作成時に入力されたメールアドレスに確認メールを送信して
メールを受信したユーザに承諾された時に初めてアカウントが作成する処理を作るのも
いざ作ろうと思うとかなり面倒なので、プラグインとして用意されているのは便利ですね。
※Loginプラグインはデフォルトではエラーメッセージやメール文章などが 英語で表示されますが、別途設定ファイルを用意することで 日本語を割り当てることが可能です。具体的な方法は次回以降に扱います。
Jifty::Plugin::Authentication::Passwordを使う場合
※2008/02/09追記現在はJifty::Plugin::LoginよりもJifty::Plugin::Authentication::Passwordを
使用する方が望ましいという情報をいただきました。
ご指摘ありがとうございます。
http://d.hatena.ne.jp/charsbar/20080206
Jifty::Plugin::Authentication::Passwordを使う場合の差異は2点です。
Plugins:
- Authentication::Password: {}
2.ヘルパースクリプトで生成されたUserクラス(LoginTest\lib\LoginTest\Model\User.pm)に
プラグインの宣言を追記。
use strict;
use warnings;
package LoginTest::Model::User;
use Jifty::DBI::Schema;
use LoginTest::Record schema {};
use Jifty::Plugin::User::Mixin::Model::User;
use Jifty::Plugin::Authentication::Password::Mixin::Model::User;
1;
以降のDBのセットアップやサーバの起動手順は上記Loginプラグインと同様です。
Authentication::Passwordプラグインを使うと、
各種文言やメール文章などもデフォルトで日本語表示されます。
まとめ
Jiftyを使って、アプリケーションの雛形の作成からログイン機能を追加するところまでの流れを見てきました。ファイルやモジュールの構成などの詳細には立ち入らずにJiftyでのアプリケーション作成の概要を説明しましたが、それでもプラグインを追加・設定するだけで アカウント作成やログインなどのアカウント管理機能を手軽に導入できることが分かりました。
JiftyのPluginは「機能」だけでなくURLや画面も含めてセットで提供することも可能な為、 「サブアプリケーション」を追加するイメージに近いかもと思いました。
次回は具体的なアプリケーション作成方法を見てみたいと思います。
参考URL
トラックバック
必ず利用規約をお読み頂き、同意の上、送信してください。
また、トラックバック元・リンク先の内容にはリクルートは一切責任を負いません。
この一覧は、次のエントリーを参照しています: JiftyでWebアプリをつくる - ログイン機能を作る:
» JiftyのプラグインまわりのPPMファイルを更新 送信元 Charsbar::Note
つくるぶガイドブログにJiftyのログイン周りの記事が掲載されていたのですが、以前PPMに登録したLoginプラグインが古いとの指摘があったのでその辺だ... [詳しくはこちら]




コメント (1)
おいしそうなJiftyの記事があがってきて嬉しいです。
こっちを使う方法もありますよ。
Jifty::Plugin::Authentication::Password
モデルとしては
Jifty::Plugin::Authentication::Password::Mixin::Model::User
をMixin
投稿者: bokutin | 2008年02月06日 10:30