2011年8月10日水曜日

簡単にログイン認証ページが作れるnifty-generators

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
こちらのサイトが非常に参考になりそうです。


機能ジャンル別にわけて多くのgemが紹介されています。これを参考にgemをテストしていって
必要なgemを取り入れて行きたい。

まずはログイン認証に関して調べました。OmniAuth、Deviseが定番みたいですが
nifty-generatorsというgemがあるみたいでログイン認証ページを作るときに使うみたいです。


機能として
・ログイン認証(アカウント作成、ログイン、ログアウトページ)の自動作成
モデルのバリデーションも自動で作ってくれる
・SHA-1によるハッシュパスワード

デモページ作ってみました。nifty-generatorsのデモページ
※削除しました。

newやeditはアカウント作成してログインする必要があります。

やり方は(使用したのはruby 1.9 rails 3.09)
①gemfile以下を記述
gem "nifty-generators", :group => :development
gem "bcrypt-ruby"

bcrypt-rubyは どっかの引用「SHA-1のようなハッシュ関数よりも低速で動作するハッシュアルゴリズムを実装している」らしい。nifty-generatorsのパスワード認証に必要なので入れる

②gemインストール
bundle install

③各種ページ、モデル、コントローラのgeneratorで実装
・テスト用ページの作成 post
rails g nifty:scaffold post name:string index new edit

・アカウント認証用ページの作成 account 
 rails g nifty:authentication
 (アカウント作成用ページと、ログイン、ログアウトページが作成される)

・レイアウト部分 ビュー、CSSを作成。
rails g nifty:layout

titleが定義されていないというエラーが出る場合はこれが必要のようだ

・config設定用(よくわからない、とりあえず実装)
rails g nifty:config
root_urlがエラーになる場合
root :to => "home#index"をrouteファイルに追加
既存のpublic/indexのファイルを削除しておく。

homeコントローラーとindexアクション、ビューを作成。
ついでにpost一覧へのリンクもつけておく
<%= link_to "posts View All", :controller=>:posts,:action=>:index %>

あとついでに共通レイアウトにログイン、ログアウトのリンクもつけておく。
(controller_authenticationに例のソースコードがあるのでコピペ)

<% if logged_in? %>
   Welcome <%= current_account.username %>.
    <%= link_to "Edit profile", edit_current_account_path %> or
     <%= link_to "Log out", logout_path %>
   <% else %>
    <%= link_to "Sign up", signup_path %> or
    <%= link_to "log in", login_path %>.
 <% end %>

④認証が必要なページにフィルター login_requiredメソッドを定義
before_filter :login_required, :except => [:index, :show]

この場合はposts_controllerのindex,show以外のページを設定

で問題なくいけました。
ただ、ログイン時のuser名の入力に
name or emaiとになっているがnameだと認証してくれない・・・・。
emailを入力した場合は問題なく動いてくれる。
とりあえず使うときに考えよう。
次はOmniAuth、Deviseを実装してみよう。

0 件のコメント:

コメントを投稿