2011年8月15日月曜日

Deviseによる認証を試してみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
よく使われている多機能の認証用gemです。
すでにいろんな方が試してブログなどに書いているのでその辺も参考にさせてもらいました。

以下を参考にさせてもらいました。

deviseのhow-to翻訳
http://kosuke-komiya.info/wiki/index.php?RubyOnRails_DeviseTutorialListJa

railscastの日本語訳
http://ja.asciicasts.com/episodes/209-introducing-devise
http://ja.asciicasts.com/episodes/210-customizing-devise

deviseのreadmeの翻訳
http://d.hatena.ne.jp/babie/20100729/

ブログ
http://d.hatena.ne.jp/akihito_s/20110708

gith
https://github.com/plataformatec/devise/


感想は、ログインに関する機能はだいたいついていてさらに細かい設定ができる。その分すべてを理解するのは大変かなあ。私はさわりの部分だけ使えたらいいかなと思いました。
実際に試したのは認証+アカウント作成のメール通知とアカウントロックの機能です。↑を参考にしつつなんとか動かせました。

●機能メモ
デフォルト

:database_authenticatable, パスワード管理DB
:registerable,ユーザーのアカウント作成編集削除機能
:recoverable,パスワード忘れ対策
:rememberable,次回以降自動的にログインする」の機能
:trackable,ログイン履歴をとる
:validatable入力されたメールアドレスやパスワードのチェック

好みで付加する機能
:Confirmable 確認のためにEメールを送り、サインインの際に既に確認されたかどうか検査
:Lockable 規定回数以上ログインに失敗したらアカウントをロックする
:Token Authenticatable "single access token"として知られる)認証トークンに基づいてサインインする
:Oauthable  OAuth2 サポートを追加します。
:Timeoutable 特定の期間に活動がなかった場合、セッションを破棄

今回、Confirmableと:Lockableを付加してみました。


●はまったこと、エラー対処のメモ
1.development環境で確認メールが送られない

対処
config/environments/development.rbの以下をtrueに
config.action_mailer.raise_delivery_errors = true

2.herokuサーバーにおいたときのエラー
Missing host to link to! Please provide :host parameter or set default_url_options[:host] when sending emails

対処
以下をproducsitonに記述、修正
  #devise
  config.action_mailer.default_url_options = { :host => 'devisetestcafe.heroku.com' }

3.Net::SMTPAuthenticationError (535-5.7.1 Username and Password not accepted. Learn more at                  
)

対処

参考 http://stackoverflow.com/questions/6956018/netsmtpauthenticationerror-in-rails-3-1-0-rc5-when-connecting-to-gmail

#add mail config
config.action_mailer.perform_deliveries = true # Set it to false to disable the email in dev mode
config.action_mailer.delivery_method = :smtp

ActionMailer::Base.smtp_settings = {
                    :address        => "smtp.gmail.com",
                    :port           => 587,
                    :authentication => :plain,
                    :user_name      => "my mail name",
                    :password       => "my mail password"
}

4.ルーティングエラー No route matches "/users/sign_out"

対処
ビューを変更
<%= link_to "Sign out", destroy_user_session_path %>
下に変更する
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>


5.モデルの名前をuser以外にした場合のエラー
ビュー、コントローラーのuser~などのメソッドを修正する
→user以外に名前を変えないほうがよさそう

Omniauthでのtwitter認証が簡単に併用できるらしいので次はそれをやってみよう



0 件のコメント:

コメントを投稿