Railsで使えるGem

Rails3.2のアプリにユーザー機能を追加する~Devise

投稿日:

 

アプリにユーザー機能を追加するためにdeviseというgemを使った

deviseを使えば高機能なユーザー管理機能を簡単につけることができる

参考

Rails3.2+Mongoidでログイン機能~devise

Deviseのユーザーと既存のMongoidモデルを関連づける

インストール

Gemfile

bundle

generate

 専用モデル作成

 初期設定など

前に書いた記事のとおり、インストール後の指示に従って設定する

  • メールの設定
  • ルートアドレスの設定
  • noticeとalertの通知の設定
  • herokuを使う場合のアセットコンパイルの設定

次にやること

  • サインイン・サインアウトのリンクの設定
  • サインイン状態のとき、サインアウト状態のとき、できること、できないことを設定する

サインイン・サインアウトのリンクの設定

サインイン・サインアウトのパスは、rake routesでわかるnew_user_sessionとdestroy_user_session

そして、viewのなかでログイン状態かどうかは便利なヘルパーが準備されていてuser_signed_in?でチェックできる

こんな感じで書けばよくある感じになる

サインイン状態・サインアウト状態のときにできること、できないことを設定する

こちらにも便利なメソッドが用意されていて authenticate_user!でできるメソッドを選べる

サインアウト状態のときに設定したページにアクセスしようとするとサインイン画面に飛ばされる

メッセージを日本語化する

インストールすれば、config/locales/devise.en.ymlができているので、これを翻訳すればいいけど、翻訳版を公表してくれている人がいる

raw.github.com/gist/606476/15605bdbc28067c7983cefae3ae12105ee93c243/devise.ja.yml

デバイスモデルにカラムを追加

emailをアクセス名にしているけどユーザー名もつけたいとき

こんなmigrationファイルができてればOK

rake db:migrate

最後にnameにアクセスできるようにUserモデルを設定する

 

サインアップできないように設定する

deviseは便利なmoduleが基本で12個ついてきて機能をいろいろ選べる.

  • Database Authenticatable: encrypts and stores a password in the database to validate the authenticity of a user while signing in. The authentication can be done both through POST requests or HTTP Basic Authentication. データベースにパスワードを暗号化して保存することによって、認証を確認する.認証はPOSTリクエストでもHTTP Basc Authenticationでもできる.
  • Token Authenticatable: signs in a user based on an authentication token (also known as “single access token”). The token can be given both through query string or HTTP Basic Authentication. 認証トークンにもとづいてサインインする。(これはシングルアクセストークンとしても知られている).このトークンはクエリー文字列?でもHTTP Basic Authenticationでも与えられる.
  • Omniauthable: adds Omniauth (github.com/intridea/omniauth) support; Omuniauthをサポート
  • Confirmable: sends emails with confirmation instructions and verifies whether an account is already confirmed during sign in. 確認のためのメールを送信して、サインインしている最中にアカウントが確認されたかどうかを確かめる.
  • Recoverable: resets the user password and sends reset instructions. ユーザーパスワードをリセットして、リセットのメールを送る.
  • Registerable: handles signing up users through a registration process, also allowing them to edit and destroy their account. 認証プロセスを通じたユーザーのサインアップ(登録)を扱う、またユーザー情報の編集と削除を許す.
  • Rememberable: manages generating and clearing a token for remembering the user from a saved cookie. 保存されたクッキーによってユーザーを覚えておくためのトークンを生成したり、削除したりすることを管理する.
  • Trackable: tracks sign in count, timestamps and IP address. サインインした回数、時刻、IPアドレスを保存する.
  • Timeoutable: expires sessions that have no activity in a specified period of time. 特定の期間を経過してもアクションがない場合にセッションを期限切れにする.
  • Validatable: provides validations of email and password. It’s optional and can be customized, so you’re able to define your own validations.  メールとパスワードのバリデーションを提供する.これは選択的でカスタマイズもできるし、自分自身のバリデーションも定義できる.
  • Lockable: locks an account after a specified number of failed sign-in attempts. Can unlock via email or after a specified time period. 特定の回数サインインに失敗した場合、アカウントを凍結する.メールを通じてか、特定の期間を経過後にこれを解除できる.

 

意訳だし間違ってるかも

 

誰でもユーザー登録ができる機能は:registerableだから、これをコメントアウトすればOK

rake routesでルートも削除されるし、サインイン画面にあったsign upのリンクも消える

もし消えない場合はサーバーを再起動すると反映されるかもしれない

 

 

FactoryGirlを使ってseedで初期ユーザーを登録する

最近だんだんとFactoryGirlと仲良くなってきた気がするよ.

まず、factoryを用意する

初期設定用のユーザーを準備する

次にdb/seeds.rbでこれをrequireする

今回はユーザーを全部削除するようにした

で、rake db:seed

*herokuにアップしたらうまくseedが動かなかったorz

rspecでdeviseサインイン状態にする

さて、deviseのアクセス制限を設定するとテストが軒並み通らなくなって涙目になる.

いままでのテストはサインイン状態でアクセスするようにしたい.

参照

RubyとRailsのテスト関係のリンクメモ

もし、:confirmableモジュールを使っているなら簡単な方法があるっぽい

Rails – Devise User Sign In for RSpec

今回は、:confirmableを使わないので、ちょっとめんどくさい

けど、リンク先に従えば動いた

How To: Controllers and Views tests with Rails 3 (and rspec)

まず、spec/spec_helper.rbのRSpec.configureの中にDeviseのTestHelpersをインクルードする

次に、spec/supportディレクトリを作って、contoroller_macros.rbというファイルを作成する

:confirmableを使ってないのでconfirm!を呼ぼうとするとエラーになる

で、これはextend

controllerのspecファイルでlogin_adminを呼べばいい.

参照先にあるようにitの外で呼ぶ.下手にbeforeの中とかで呼ぼうとしたらうまく動かなかった.

 

-Railsで使えるGem
-,

執筆者:

関連記事

Rails3でajaxでD&Dでまとめてファイルアップロード2~jQueryFileUpload for Rails

  前提 Rails3でajaxでD&Dでまとめてファイルアップロード~jQueryFileUpload for Rails Ruby on Rails 3.2でファイルアップロード …

ActiveRecord使い方まとめ

By: North Carolina National Guard – CC BY 2.0 ActiveRecord入門|ドットインストールをみて個人的まとめ ActiveRecord4の …

CarrierWaveで添付したファイルをrroongaで全文検索

By: Alan Levine – CC BY 2.0 目次1 Carrierwave2 rroonga3 Gemfile4 application.rb5 config/initiali …

テキストマイニングの初歩 Rubyで形態素解析を行う〜ruby-mecab

By: Cracker Jack – CC BY 2.0 環境 ubuntu server 12.04 英語は単語を空白で区切るのでコンピュータでの解析に向いているが、日本語は助詞などを続 …

Rails3.2でJasmineをつかってCoffeeScriptをテスト~jasminerice

    #261 Testing JavaScript with Jasmine (revised)   addyosmani.github.com/backbone-f