学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

Ruby on Rails | deviceの活用

↓↓クリックして頂けると励みになります。



Ruby on Railsでログインを実装する時、「device」を活用すると素早く実装することができます。
deviseはユーザーの登録、ログイン、ログアウト、パスワードリセットなどの認証機能があり、Gメールの設定をすることで、セキュリティが向上します。


バージョン4.8をGemFileに記述します。
Rails7.0を使用するときはバージョン4.9にしてください。

gem 'devise', '~> 4.8', '>= 4.8.1'


バンドルします。
コマンド
bundle


デバイスをインストールします。
コマンド
rails g devise:install


下記のようなインフォメーションがでますので、その流れですすめます。

===============================================================================

Depending on your application's configuration some manual setup may be required:

  1. Ensure you have defined default url options in your environments files. Here
     is an example of default_url_options appropriate for a development environment
     in config/environments/development.rb:

       config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

     In production, :host should be set to the actual host of your application.

     * Required for all applications. *

  2. Ensure you have defined root_url to *something* in your config/routes.rb.
     For example:

       root to: "home#index"
     
     * Not required for API-only Applications *

  3. Ensure you have flash messages in app/views/layouts/application.html.erb.
     For example:

       <p class="notice"><%= notice %></p>
       <p class="alert"><%= alert %></p>

     * Not required for API-only Applications *

  4. You can copy Devise views (for customization) to your app by running:

       rails g devise:views
       
     * Not required *

===============================================================================



まず、ユーザーテーブルを作ります。
コマンド
rails g devise user

ユーザーテーブル作成
ユーザーテーブル作成



ビューを作成します。
コマンド
rails g devise:views

ビュー作成
ビュー作成



マイグレーションを適用します。
コマンド
rails db:migrate


メールが送れるように設定します。
これは開発環境での設定になります。
「config\environments\development.rb」ファイルの末尾に以下の記述を追加します。

  # デバイスのメール設定
  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }



「app\views\layouts\application.html.erb」ファイルのbodyタグに以下の記述を追加します。

<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>



Webサーバーを起動して表示を確認してみます。
http://localhost:3000/users/sign_up


まだダサいですがサインアップは機能します。

デフォルトデザイン
デフォルトデザイン



ユーザ名を登録するフィールドを追加します。
コマンド
rails g migration AddFullnameToUser full_name:string


マイグレーションを適用します。
コマンド
rails db:migrate


許可パラメータに「full_name」を追加します。
これによって「permitted_parameters」で許可されたパラメータのみ変更が可能となります。
「app\controllers\application_controller.rb」ファイルを以下のように更新して下さい。

class ApplicationController < ActionController::Base

    before_action :configure_permitted_parameters, if: :devise_controller?

    protected
    def configure_permitted_parameters
        devise_parameter_sanitizer.permit(:sign_up, keys: [:full_name])
        devise_parameter_sanitizer.permit(:account_update, keys: [:full_name])
    end
    
end



認証ビューを更新します。


記述更新 【app\views\devise\registrations\new.html.erb】

<div class="container px-4">
  <div class="row gx-5">
    <div class="col">

      <div class="card w-100 mb-3">
        <div class="card-body">
          <h5 class="card-title text-danger h3"><strong>レポーター新規登録</strong></h5>
          <p class="card-text"><strong>魔法のペンを手に入れよう!</strong>言葉で世界を変える力があなたの手に。レポーターとしての才能を発揮し、魔法のペンを手に入れるために登録しましょう。</p>

          <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
      
            <div class="mb-5 mt-5">
              <label for="exampleInputEmail1" class="form-label">ペンネーム</label>
              <%= f.text_field :full_name, autofocus: true, placeholder: "ペンネーム", class: "form-control" %>
              <div id="emailHelp" class="form-text">あなたのペンネームは、世界中で広がる素晴らしいストーリーの始まりです。今すぐ登録し、その世界への扉を開きましょう。</div>
            </div>

            <div class="mb-5">
              <label for="exampleInputEmail1" class="form-label">Eメールアドレス</label>
              <%= f.email_field :email, autofocus: true, placeholder: "Eメールアドレス", class: "form-control" %>
              <div id="emailHelp" class="form-text">あなたのメールは他の誰とも共有しません。</div>
            </div>

            <div class="mb-3">
              <label for="exampleInputEmail1" class="form-label">パスワード</label>
              <%= f.password_field :password, autocomplete: "off", placeholder: "パスワード", class: "form-control" %>
              <div id="emailHelp" class="form-text">強力なセキュリティを確保するために、最低でも6文字以上のパスワードが必要です。</div>
            </div>          

            <div class="mb-5">
              <label for="exampleInputEmail1" class="form-label">パスワード確認</label>
              <%= f.password_field :password_confirmation, autocomplete: "off", placeholder: "パスワード確認", class: "form-control" %>
              <div id="emailHelp" class="form-text">パスワード確認: 確認のため、入力したパスワードをもう一度入力してください。同じパスワードを入力する必要があります。</div>
            </div>
            

              <%= f.submit "登録", class: "btn btn-danger w-100" %>

          <% end %>
          <%= render "devise/shared/links" %>

        </div>
      </div>
    
      <div class="card w-100 mb-5">
        <div class="card-body">
          <h5 class="card-title text-dark h6">下記サービスアカウントでの登録はこちら</h5>
          <p class="card-text"></p>
          <a href="#" class="btn btn-primary w-100">Google</a>
        </div>
      </div>    


    </div>

  </div>
</div>



このようにBootstrapを活用することで、見栄えも良くなります。

サインアップ画面
サインアップ画面



↓↓クリックして頂けると励みになります。