🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

2470閲覧

Deviseを使用して名前とパスワードのみでログイン機能を実装する方法

Angelica.87

総合スコア9

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/01/23 07:18

前提・実現したいこと

Ruby on Railsの入門書を参考にして、オリジナルのWEBアプリを作成しようと取り組んでいるところです。
Deviseを使用して名前とパスワードのみ新規登録の情報に登録して、ログイン時も名前とパスワードのみでログイン出来るようにしたい。
以下試したことにあるように新規登録に名前とemailとPasswordを登録した上でログイン時は名前とPasswordでログインすることは出来た。
しかし、新規登録時にemailを登録しないで、ログイン時は名前とPasswordでログイン出来るようにしたい。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

WEBの情報を参考に以下を実行。

1.Deviseアプリケーションを作成するためにコマンドプロントにてrails new RailsApp を入力してアプリケーションの作成を行う。

2.DeviseのインストールをするためGemfileにgem 'devise'を追記する。

3.コマンドプロントにてbundle installを行う。

4.コマンドプロントにてrails generate devise:installを行う。

5.Deviseの生成に必要な関連ファイルの作成をするためコマンドプロントにてrails generate devise user を実施する。

6.userのモデルを作るマイグレーションファイルに、nameカラムを追加する。

Ruby

1#db/migrate/2021...devise_create_users.rb 2# 中略 3 ## Lockable 4 # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts 5 # t.string :unlock_token # Only if unlock strategy is :email or :both 6 # t.datetime :locked_at 7 8 t.string :name # ここに追加しました。 9 t.timestamps null: false 10# 中略

7.マイグレーションを行うために上記コードを入力してコマンドプロントにてrails db:migrateを実行する。

8.新規登録の際に、名前を登録できるように必要なviewファイルを可視化させるためにコマンドラインにてrails generate devise:viewsを実行する

9.新規登録の画面に、nameを送るフォームを追加する

Ruby

1#app/views/devise/registrations/new.html.erb 2<h2>Sign up</h2> 3 4<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 5 <%= render "users/shared/error_messages", resource: resource %> 6 7<!-- ここから追加 --!> 8 <div class="field"> 9 <%= f.label :name %><br /> 10 <%= f.text_field :name, autofocus: true, autocomplete: "name" %> 11 </div> 12<!-- ここまで追加 --!> 13 14 <div class="field"> 15 <%= f.label :email %><br /> 16 <%= f.email_field :email, autofocus: true, autocomplete: "email" %> 17 </div> 18 19 <--! これより下は省略 !-->

10.コマンドプロントにてrails serverを実行してlocalhost:3000/users/sign_upにアクセスすると下記画像のように名前のフォームが追加されていることが分かる。
イメージ説明

11.新規登録の際に、nameの情報を送って良いように許可する

Ruby

1#app/controllers/application_controller.rb 2class ApplicationController < ActionController::Base 3 before_action :configure_permitted_parameters, if: :devise_controller? 4 5 private 6 7 def configure_permitted_parameters 8 devise_parameter_sanitizer.permit(:sign_up,keys:[:name]) 9 end 10end

12.ログイン画面の、emailを送るフォームを、nameを送るフォームに変更する

Ruby

1#app/views/devise/sessions/new.html.erb 2 3<h2>Log in</h2> 4 5<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> 6 7<!-- ここから追加 --!> 8 <div class="field"> 9 <%= f.label :name %><br /> 10 <%= f.text_field :name, autofocus: true, autocomplete: "name" %> 11 </div> 12<!-- ここまで追加 --!> 13 14<!-- ここから削除 --!> 15 <div class="field"> 16 <%= f.label :email %><br /> 17 <%= f.email_field :email, autofocus: true, autocomplete: "email" %> 18 </div> 19<!-- ここまで削除 --!> 20 21 <--! これより下は省略 !-->

13.ログインに使う値をemailからnameに変更する

Ruby

1#config/initializers/devise.rb 2 3#中略 4 5# config.authentication_keys = [:email]を 6 config.authentication_keys = [:name]#に変更 7 8#以下省略 9

・これでエラーを出さずにログインすることが出来るようになったが新規登録にemailの情報を登録しないといけない。
・新規登録に名前とパスワードのみで登録しエラーを出さずにログイン出来るようにしたい。

補足情報(FW/ツールのバージョンなど)

os windows10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Deviseを使ってユーザー管理を行う場合大抵は ユーザー登録時に入力したメールアドレスにメールを送って正しいアドレスか確認するという手順が入ります。
それが不要なら、例えばここを参照して修正してください。

でも、その機能が不要なら、そんな大げさな仕掛けを使わずに has_secure_password で十分だと思うのですが

投稿2021/01/23 08:59

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Angelica.87

2021/01/24 05:25

winterboumさん回答ありがとうございました。とりあえずemailとパスワードでログインするような形を取りたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問