#gem devise名前でログインする方法
参考にさせていただきました
[@linkss [Devise.rb設定ファイル項目まとめ]][link-1]さん
[link-1]:https://qiita.com/linkss/items/9b005ebc2ef81a39afa2
[@matsubishi5 [【Rails】deviseを用いた名前ログイン機能の実装
]][link-2]さん
[link-2]:https://qiita.com/matsubishi5/items/5bd8fdd45af955cf137d
[@Orangina1050 [[初心者] deviseを使ってログイン機能を実装してみよう]][link-3]さん
[link-3]:https://qiita.com/Orangina1050/items/a16e655519a60f35b394
ありがとうございます
###アプリ作成
rails new hujityaku --skip-bundle
hujityaku(不時着)という名のアプリ作成
cd hujityaku
hujityakuディレクトリ移動
bundle install --path vendor/bundle
bundle installする
rails s
rails s
で立ち上がればOK
##トップ画面作成
rails g controller home top
Rails.application.routes.draw do
root to: 'home#top'
end
class HomeController < ApplicationController
def top
end
end
viewはそのままで行きます
##gem devise導入
gem 'devise' < 追記 >
bundle install
rails g devise:install
rails g devise User name:string
rails g devise User name:string
の記述で、devise Userモデルにデフォルトであるemail, passwordなど以外に追加で名前ログイン
するためのname
カラムを生成してくれる
rails db:migrate
rails g devise:controllers users
これをきちんと指定しないと、のちに
routes
で失敗する。私自身、これにハマりました。
rails g devise:views users
##名前ログインのため編集もろもろ
Rails.application.routes.draw do
root to: 'home#top'
devise_for :users, controllers: {
sessions: 'users/sessions',
registrations: 'users/registrations'
}
end
上記の様に記述する事でViewの変更が可能になる。
※ 「devise_for :users」のままでは、既存のViewが表示されてしまい、Viewの編集が効かなくなる。
-------省略--------
------<追記>-------
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name, autofocus: true, autocomplete: "name" %>
</div>
-----<ここまで>----
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
-------省略--------
< 削除 >
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
これを消して以下に変更
< 追記 >
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name, autofocus: true, autocomplete: "name" %>
</div>
application_controller.rb編集
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up,keys:[:email])
end
end
devise_parameter_sanitizer.permit(:sign_up,keys:[:email])
とする理由は、
ユーザー認証時に使用するキーを
#49行目をコメントアウトして[:name]に変更
config.authentication_keys = [:name]
に変更したため新規登録時に
ユーザー認証時に使用するキー
がnameになる。
そのため、(:sign_up,keys:[:email])
で新規登録時にemailというパラメーターを追加で許可するようにしていしなければならない。
名前でログインする必要がなければ、必要ないが今回は、名前ログイン
する方法なのでこのようにした
あとは、home#top
の記述を変更するだけでOK
<% if user_signed_in? %>
<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
<% else %>
<%= link_to "ログイン", new_user_session_path, class: 'post' %>
<%= link_to "新規登録", new_user_registration_path, class: 'post' %>
<% end %>
以上です。間違いあれば教えてください。