FrontPage  Index  Search  Changes  Login

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 ... を追加
Last modified:2006/01/06 15:05:30
Keyword(s):
References:[LoginEngineを使ってみる] [FrontPage]