前提・実現したいこと
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/24 05:25