VistaでRestfulAuthenticationを実装するには

   

基本的にはここの手順を追うことにする。
カスタマイズはうまく行った後でということで。
-------------------------
手順
1:なにはともあれRestfulAuthenticationのインストール
$ ruby script/plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication/

インストールが完了するとREADMEが表示される

-------------

Restful Authentication Generator
====

This is a basic restful authentication generator for rails, taken
from acts as authenticated.  Currently it requires Rails 1.2.6 or above.

To use:

  ./script/generate authenticated user sessions
                --include-activation
                --stateful

The first parameter specifies the model that gets created in signup
(typically a user or account model).  A model with migration is
created, as well as a basic controller with the create method.

The second parameter specifies the sessions controller name.  This is
the controller that handles the actual login/logout function on the
site.

The third parameter (--include-activation) generates the code for a
ActionMailer and its respective Activation Code through email.

The fourth (--stateful) builds in support for acts_as_state_machine
and generates activation code.  This was taken from:

http://www.vaporbase.com/postings/stateful_authentication

You can pass --skip-migration to skip the user migration.

If you're using acts_as_state_machine, define your users resource like this:

        map.resources :users, :member => { :suspend   => :put,
                                     :unsuspend => :put,
                                     :purge     => :delete }

Also, add an observer to config/environment.rb if you chose the
--include-activation option

  config.active_record.observers = :user_observer # or whatever you

                                        # named your model

Security Alert
====

I introduced a change to the model controller that's been tripping
folks up on Rails 2.0.  The change was added as a suggestion to help
combat session fixation attacks.  However, this resets the Form
Authentication token used by Request Forgery Protection.  I've left
it out now, since Rails 1.2.6 and Rails 2.0 will both stop session
fixation attacks anyway.

-------------

2:同様にscript/generate authenticated

$ ruby script/generate authenticated user sessions --include-activation
こんな感じでgenerateしちゃいます。

3:rake db:migrate

$ rake db:migrate

を実行。developmentにテーブルが作られます。

C:railsriken2>rake db:migrate
(in C:/rails/riken2)
==  CreateUsers: migrating ====================================================
-- create_table("users", {:force=>true})
   -> 0.0070s
==  CreateUsers: migrated (0.0070s) ===========================================

4:app/controllers/application.rbに追記

コメントに従って、コントローラーのapplication.rbへコピーした。(これで、lib/authenticated_system.rbのメソッド定義は、すべてのコントローラーで利用できるようになる。)

----------

class ApplicationController < ActionController::Base
include AuthenticatedSystem

helper :all # include all helpers, all the time

----------

5:ここまででとりあえず動作確認をしてみる。

動作(Event)URLHTTPメソッド(method)ルートパス名(Named route path)処理されるコントローラー, アクション(controller, action)
ログインのページ(Show login page)http://localhost:3000/session/newGETnew_session_pathsessions_controller, new
ログインの実行(Login)http://localhost:3000/sessionPOSTsession_pathsessions_controller, create
ログアウトの実行(Logout)http://localhost:3000/sessionDELETEsession_pathsessions_controller, destroy
ユーザー登録のページ(Show sign up page)http://localhost:3000/users/newGETnew_user_pathusers_controller, new
ユーザー登録の実行(Sign up)http://localhost:3000/usersPOSTuser_path(User.new)users_controller, create

ひとまずここまででユーザーを作ることはできたようだ。
二度同じユーザー名で登録するとエラーが出た。
うし、次に行こう!

6:プロジェクトのルートページが必要
とのことなので適宜修正。

次にメール認証の設定をしよう。ここが一番の肝。

メール認証の設定

config/environment.rbの設定

  • Userモデルを監視するuser_observerを有効にする。
    • I validated user_observer watching the User model.
# ---------- config/environment.rb ----------
...(中略)...
Rails::Initializer.run do |config|
...(中略)...


config/routes.rbの設定

メール認証(アクティベーション)用のルートを追加した。

# ---------- config/routes.rb ----------
ActionController::Routing::Routes.draw do |map|
map.resources :users

map.resource :session

map.resources :todos

map.activate '/activate/:activation_code', :controller = > 'users', :action => 'activate'
...(中略)...
# You can have the root of your site routed with map.root -- just remember to delete public/index.html.
map.root :controller => "welcome"

# See how all your routes lay out with "rake routes"

# Install the default routes as the lowest priority.
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'


end

config.active_record.observers = :user_observer
end

この辺から先は、先のブログの通りでOK。
SMTPの設定の場所で、ローカルから開発やってるとプロバイダのフィルタに引っ掛かってうまくいかないかもしれませんが
/log/development.log
を見れば、ちゃんとメールが送れているか否かはわかります。
アクティベーションURLとかも書いてあるから直接URL確かめてみれば良い。
アクティベーション後のメールが送信されている雰囲気がログに残っていればOK。

さーって、ちゃんと動くじゃないか!!!
あとは、既存のシステムにいかにマージして動かすかだな。
あとちょっとな予感がする。

オススメNginx本

nginx実践入門 (WEB+DB PRESS plus) 単行本(ソフトカバー) – 2016/1/16

nginxを現場で活用するための知識を、実践的なノウハウを交えて解説した書籍です。nginxのインストール方法や基本的な設定方法からはじめ、nginxを利用した「静的コンテンツ配信サーバ」「HTTPSサーバ」「Webアプリケーションサーバ」「大規模コンテンツ配信システム」の構築方法をそれぞれ詳しく紹介しています。後半ではnginxサーバのモニタリングやログの収集、そして軽量スクリプト言語Luaでnginxを拡張する方法について解説しているので、nginxをこれから使う方はもちろん、さらに活用したい方にもお勧めです。

 - Tips