FreeCamp

Gem deviseを用いて名前でログイン

Gem deviseを用いてユーザー認証機能を実装する際に、名前・パスワードでログインする方法について説明していきます。
deviseはデフォルトでメールアドレス・パスワードでのユーザー認証なので、少しカスタマイズが必要となります。

目次

  1. Gem deviseの導入(名前でログイン)
  2. 完成ソースコード

1. Gem deviseの導入

$ rails new rails_devise_name
$ cd rails_devise_name
$ rails g controller home top
...編集
get 'home/top'
↓
root 'home#top'
...追加
gem 'devise'
$ bundle
$ rails g devise:install
$ rails g devise User name:string
$ rails db:migrate
$ rails g devise:views users
$ rails g devise:controllers users
...編集
devise_for :users
↓
devise_for :users, controllers: {
  sessions: 'users/sessions',
  registrations: 'users/registrations'
}
...編集&追加
<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>

<div class="field">
  <%= f.label :email %><br />
  <%= f.email_field :email, 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>
...追加
before_action :configure_permitted_parameters,if: :devise_controller? 

private

def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up,keys:[:email])
end

sign_up時にemailの登録も可能とするため、上記の記述を行います。

...編集
# config.authentication_keys = [:email]
↓
config.authentication_keys = [:name]

emailではなく、nameで認証ができるように設定しました。
元々の認証はemail, passwordですが、この設定でname, passwordの認証へと変更しました。

...追加(bodyタグ直下)
<% if user_signed_in? %>
  <%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
<% else %>
  <%= link_to "新規登録", new_user_registration_path %>
  <%= link_to "ログイン", new_user_session_path %>
<% end %>

2. 完成ソースコード

https://github.com/ssshhhooota/rails_devise_name