class ApplicationController
session_times_out_in 10.minutes, :after_timeout => :do_something
end
で、10分アクセスがないとセッションが切れる。
class SomeModel
include AccessControl
で、モデルに対して、アトリビュート単位でのアクセスコントロールが可能。
let_read :login, :name, :if => true
let_access :salt, :cypher, :timezone, :role => 'admin'
- 同じくコントローラで、
include AccessControl
access_control :all, :if => false
access_control :rss, :if => :is_authorized_for_rss
access_control :view, :role => '(admin | user) & !blacklist'
access_control :create, :edit, :role => '(admin | moderator) & !blacklist'
# runs an arbitrary block
access_control :motd do |c|
(c.some_controller_method || c.some_other_method) && (rand > 0.5)
end
とすることで、ロールベースのアクセスコントロールができてしまう。
- プラグイン機構を持っていて、
:role オプションはそれで実現されている。parser とか含んでるから、AccessControlの下に直接書くのが忍びなかったんだろうか。丁寧な作り込み。
- captcha (人間であることを確認するゆがんだ文字のやつ)
- “completely automated public Turing test to tell computers and humans apart” の略。
$ script/generate captcha config で、設定ファイル config/captcha.ymlが作られる。
- 設定ファイルにて指定したデータ,画像保存用のディレクトリをmkdir.
- model に
validates\_captchaを追加。
- view のform中で、
<% c = prepare_captcha -%>
<%= captcha_hidden_field c, 'your_model' %>
<%= captcha_image_tag c %>
<%= captcha_label 'your_model', 'Type in the text from the image above' %>
<%= captcha_text_field 'your_model' %>
とすることで、captchaが使えるようになる。
- アカウント毎にサブドメインがあるような、スコープ付の認証に。
- script/generate authenticated user account で認証機能が作れる
- メール認証を使ったアクティベーションも作れる
- generator を使うので、既存のクラスに機能追加するのはできない?
# in config/environment.rb
module LoginEngine
config :salt, "your-salt-here"
end
Engines.start :login
という感じで設定を記述する
- engines というplugin に依存している
- 上記を設定してから、
$ rake engine_migrate ENGINE=login でDBのスキーマを変更できる。
- 最近は
$ rake db:migrate:engines ENGINE=login
- メール認証も余裕で対応!
- さらばlogin_engine
- login_engine をさらに拡張する形で、role ベースの認証を組み込める。
Engines.start :login
Engines.start :user
login_engineより後じゃなきゃダメ。
include SslRequirement
ssl_required :signup
とすると、signup が実行される時は、ssl にリダイレクトされる。
verify\_form\_posts\_have\_security\_token を使うと、postされた値が正当なものかどうかチェックできる。
secure\_form\_tag を使ってform の中にsession id をハッシュしたトークンを埋め込んでおいて、セッション中の値と比較する、という仕組み。
- 元ネタはこちら。
- 指定したフィールド(主にpassword)の値を暗号化してくれる
- 暗号化の方式は、いくつか選べるようだ。
〜へのトラックバック Rails Plugin - 認証系