こんにちは、hachi8833です。
今回より、Railsの認証用gemの定番中の定番であるDevise gemのWiki How-Toを順次翻訳いたします。
Devise Wikiもくじリンク
- 「ワークフローのカスタマイズ」
- 「認証方法のカスタマイズ」「OmniAuth」
- 「ビュー/コンテンツのカスタマイズ」「特権/認証」
- 「テスト」「特殊な設定」
- 「アプリでのその他の設定」「JavaScript」
- 「他の認証プラグインからの移行」「アップグレード」
概要
- 原文: How To: Automatically generate password for users (simpler registration)
- リビジョン: 28 Jan 2014 · 3 revisions
原文の更新や訳文の誤りにお気づきの場合は、ぜひ@techrachoまでお知らせください。更新いたします。
ユーザーのパスワードを自動生成する(シンプルな登録方法)(翻訳)
最近のWebサイトでは、ユーザーが自分のメールアドレスを入力するだけで「即座に簡単登録できる」機能を搭載するのが当たり前になりつつあります。
登録後ユーザーに送信される確認メールには、自動生成されたパスワードが含まれます。ユーザーがそのパスワードを何らかの理由で気に入らない場合(パスワードが弱すぎるとか、パスワードが強すぎて覚えられないなど)、確認メール内に含まれる確認用リンクをクリックすればすぐにパスワードを変更できます。
以下はslashdot.orgの場合の実装例です。
generated_password = Devise.friendly_token.first(8)
user = User.create!(:email => email, :password => generated_password)
RegistrationMailer.welcome(user, generated_password).deliver
Q&A
質問
Devise::RegistrationsController#create
アクションはオーバーライドされますか?- 実装したコントローラ全体のコードはありますか?
- 新規作成されたパスワードと一緒に送信されるウェルカムメッセージについて詳しく教えていただけますか?
- 最後に、パスワード変更リクエスト機能を含む確認ページについても詳しく教えていただけますか?
回答
回答はシンプルでもなく詳しくもありませんが、ご了承ください。
Devise::RegistrationsController
はオーバーライドされません。そもそも上の例ではDevise::RegistrationsController
をまったく使っていません。ユーザーがシステムにアカウントを直接作成する手段は提供されていません。ユーザー登録のワークフローがひととおり終わってから、最後に上のコードを使ってアカウントを作成し、ユーザーにメール送信しています。上のコードは、実際には以下のコードと併用しています。
sign_in(:user, user)
これにより、ユーザーは新規ユーザーとしてシームレスにログインできます。ここで言うログインは、ユーザーがページに戻ってきたときのためのものです。メールには /user/edit へのリンクを含めておき、パスワードを変更できるようにしておきます。ただし私はパスワードの変更もメールでの確認も必須にはしていません。
今週末にでも何かブログ記事を書こうと思っていますので、実例についてはそちらでご覧いただけるかと思います。
訳注: (http://blog.plataformatec.com.brなどにはそれらしい記事は見当たりませんでした。
訳注: 原文の最後に、ここでご紹介した設定が最も安全な方法であるとは思っていないと断り書きがあります。
関連記事(Devise)
- Rails4: 古いdeviseのパスワードを新しいdeviseで使う方法
- Rails 3.1.0.rc8にしようとしたらdeviseが違うバージョンのbcryptに依存していてアップデートできない
- [Rails 3] deviseで使うモデルにfind_by_で始まる名前のscopeを定義するとrake db:migrate:resetが通らない
- [Rails 3] 失敗しないmigrationを書こう
- [Rails 3] Appサーバが複数だとdevise_openid_authenticatableで認証できない