Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://rubyonrails2006.blog63.fc2.com/tb.php/15-b66f281b

-件のトラックバック

-件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

認証の仕組みを用意する

Railsには様々な認証の仕組みがありますが、まずは基本的なものとして、
LoginGeneratorを使いたいと思います。

http://wiki.rubyonrails.com/rails/pages/HowToQuicklyDoAuthenticationWithLoginGenerator に基づき、ちょっとやり方を変えてあります。


1.用意

まず、LoginGeneratorをインストールします。

shell> gem install login_generator

2.次に、テスト用のプロジェクトを作成します。

shell> cd [普段プロジェクトを保存しているディレクトリ]
shell> rails myaccount
shell> mysql -u root --password
sql> create database myaccount_development
sql> use myaccount_development
sql>   CREATE TABLE users (
    id int(11) NOT NULL auto_increment,
    login varchar(80) default NULL,
    password varchar(40) default NULL,
    PRIMARY KEY  (id)
  );
sql> exit
shell> cd myaccount
shell> ruby script/generate login Account

※mysqlを前提としています。それ以外の方は、テーブルを
  
http://wiki.rubyonrails.com/rails/pages/HowToQuicklyDoAuthenticationWithLoginGenerator
  を参照に作成してください。また、mysqlの方も、rootのパスワードをconfig/database.yml
  に記載してください。

※ RadRailsをお使いの方は、
1. 新規作成して、
2. 該当するdatabase.ymlに該当するデータベースを作り、
   その中に


  CREATE TABLE users (
    id int(11) NOT NULL auto_increment,
    login varchar(80) default NULL,
    password varchar(40) default NULL,
    PRIMARY KEY  (id)
  );


  というテーブルを作成してから
3. Generatorsで "login" -> "Account"
  するという意味だと思ってください。

3.app/controllers/application.rb を変更します。


変更前:
# 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
end


変更後:
# 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.
require_dependency "login_system"


class ApplicationController < ActionController::Base
  include LoginSystem
  model :user
end

ここまでで、アプリケーションが完成されます。
http://[あなたのIPアドレス]:3000/account/login
へアクセスしてみてください。ローカルホストアクセスだと、WindowsXP環境下では
正常に利用できないので、注意願います。(クッキーが保持されていないっぽい)

4.では、実際にサインアップしてみましょう。
私のIPアドレスは 192.168.80.1なので、
http://192.167.80.1:3000/account/signup
にアクセスします。サインアップ画面なので、ユーザーID、パスワードを記載すると
http://192.167.80.1:3000/account/welcome
というURLにリダイレクトされます。

その後ログアウト画面
http://192.167.80.1:3000/account/logout
をたたくとログアウトされ、

その後にログイン画面
http://192.167.80.1:3000/account/login
からログインできます。

5.次に、ログイン名を表示してみましょう。
ビューである
shell> cd [普段プロジェクトを保存しているディレクトリ] の後、
app/views/account/welcome.rhtml

    <h3>Welcome</h3>

    <h3>Welcome <%= @session['user'].login %></h3>
とします。 (@session[:user].loginではなぜかうまくいきませんでした。)

ログインしてから再び、
http://192.167.80.1:3000/account/welcome
を表示してみてください。

6.最後に、ほかのコントローラーから呼び出して見ましょう。

shell> cd [普段プロジェクトを保存しているディレクトリ]
shell> ruby script/generate controller test index test1 test2
とし、testコントローラーとView index, test1, test2を作成します。

test_controller.rbに

class AllMySecretsController < ApplicationController
   before_filter :login_required, :except => [ :index,test2]

   def show_one_secret
      ...
   end
end

と追加します。

これで、「index、test2」をのぞいたView (つまり、test1)にログインが要求されます。
反対に、「test1とtest2」のみログインを要求したい場合は
   before_filter :login_required, :except => [ :test1, :test2]
とします。

スポンサーサイト
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://rubyonrails2006.blog63.fc2.com/tb.php/15-b66f281b

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。