SaltedHashLoginGeneratorを使ってみる
SaltedHashLoginGeneratorとは?
SaltedHashLoginGenerator は、Railsのアプリケーションにログインなどのユーザ認証の機構を付加する ジェネレータです。 同様のものに Login Generator というものがあります。SaltedHashLoginGeneratorは、Login Generator を発 展させたものと言えます。
ただし、SaltedHashLoginGeneratorは、現在では Rails のプラグイン機構を 利用してLoginEngineとして再実装されています。
プラグイン機構を持たない Rails 0.13 以前では SaltedHashLoginGenerator は有用ですが、Rails 1.0 で使うなら LoginEngine のほうが良いでしょう。 LoginEngine については LoginEngineを使ってみる のページを参照してください。
SaltedHashLoginGeneratorの特徴
- メールによるアカウントの登録・パスワードの初期化
- ユーザによるパスワード変更画面の実装
- 多言語対応
- etc
インストールと設定
以下に、実際に自分で試してみたやり方を書いてみますが、 SaltedHashLoginGeneratorQuickstartのページに書いてある手順ほぼそのままです。
gem install
rubygems の環境であればインストールは簡単です。
# gem install salted_login_generator # gem install localization_generator
railsアプリケーション作成
いつも通り rails アプリケーションを作ります。
例:
% rails myapp % cd myapp
ジェネレータでコード生成
ruby script/generate salted_login User Localization
User, Localization はそれぞれ好きな名前にすることもできますが、ここで はこの名前を使うことにします。
application.rbの編集
app/controllers/application.rb を以下のように編集します。
require 'localization' require 'user_system' # Filters added to this controller will be run for all controllers in the application. # Likewise, all the methods added will be available for all controllers. class ApplicationController < ActionController::Base include Localization include UserSystem helper :user model :user end
before_filterの追加
ユーザ認証をかけるコントローラに
before_filter :login_required
という行を追加します。ここで注意するべきことは、先ほどジェネレータで生 成した app/controllers/user_controller.rb には、この行は必須であ るということです。
class UserController < ApplicationController before_filter :login_required (以下略)
なお、アプリケーション全体に認証をかけるなら、 app/controllers/application.rb に before_filter の行を追加するのが楽で す。その場合は、user_controller.rb に before_filter 行を追加する必要は ありません。
application_helper.rbの編集
app/helpers/application_helper.rbにinclude Localization という行を追加 します。
module ApplicationHelper include Localization end
environment.rbの編集
config/environment.rbの末尾に以下の行を追加します。
require 'environments/localization_environment' require 'localization' Localization::load_localized_strings require 'environments/user_environment'
上記の user や localization は、ジェネレータで指定した名前によって変わ ります。
localization_environment.rbの編集
config/environments/localization_environment.rb を必要に応じて変更しま す。説明は、アプリケーションのトップディレクトリに生成されている README_LOCALIZATION に書いてあります。ここでは変更しないものとして進め ます。
user_environment.rbの編集
config/environments/user_environment.rb を修正します。 とりあえず、:email_from, :admin_email, :app_url, :app_name あたりを変 更しておけば良いでしょう。
ActionMailerの設定
RailsのメールシステムであるActionMailerの設定をします。 環境に応じて、environments/development.rb, config/environments/test.rb, config/environments/production.rb に以下のような行を追加します。
ActionMailer::Base.server_settings = {
:address => "smtp.yourdomain.com",
::domain => "yourdomain.com",
:port => 25
}
データベースの設定
データベースの設定をします。config/database.yml を適切に設定します。
また、アプリケーションのトップディレクトリに生成されている README_USER_LOGIN を読んで、使っているデータベースに合わせて users テー ブルを作成します。たとえば sqlite なら以下のようになります。
CREATE TABLE 'users' ( id INTEGER PRIMARY KEY, login VARCHAR(80) NOT NULL, salted_password VARCHAR(40) NOT NULL, email VARCHAR(60) NOT NULL, firstname VARCHAR(40), lastname VARCHAR(40), salt CHAR(40) NOT NULL, verified INT default 0, role VARCHAR(40) default NULL, security_token CHAR(40) default NULL, token_expiry DATETIME default NULL, deleted INT default 0, delete_after DATETIME default NULL );
上記は最低限必要なフィールドで、必要に応じてフィールドを追加することは 構いません。
テスト
ここまででひととおり必要な設定は済んでいるはずです。以下のテストを実行 して問題がないことを確認します。
% rake test_units % rake test_functional
もし、warning: already initialized constant DEFAULT_HEAD_OPTIONS とい う warning が出力されるようであれば、app/helpers/user_helper.rb を以下 のように修正します。
DEFAULT_HEAD_OPTIONS = {
:notice => true,
:message => true,
:error => false
}.freeze unless const_defined? "DEFAULT_HEAD_OPTIONS"
# unless ... を追加

Keyword(s):
References:[LoginEngineを使ってみる] [FrontPage]