2016年6月19日日曜日

Webサービスの作り方を実例のRailsで【ログイン認証・devise】

会員ユーザーの登路機能を実装していきたいと思います。
Railsのdeviseという機能を使って実装を行います。

1.deviseをGemfileに追加
1
gem 'devise'
$ bundle install

2.Railsプロジェクトにdevise関連ファイルを追加
$ rails generate devise:install
 
このコマンドにより、5つの初期設定に関するメッセージが表示。
・メール送信時のホスト名を指定(今回は抜粋)
・rootのURL指定(設定済み)
・flashメッセージの表示領域(後に設置します。)
・Rails3.2だけ必要なのでスキップ
・Viewのカスタマイズ
今回はViewをカスタマイズしたいと思いますので、コマンドを使います。
$ rails g devise:views
ご紹介するのはBootstrapによるflashメッセージの装飾です。
app/helpers/application_helper.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
module ApplicationHelper
    def bootstrap_class_for(flash_type)
        case flash_type
            when :success
            "alert-success"
            when :error
            "alert-danger"
            when :alert
            "alert-warning"
            when :notice
            "alert-info"
            else
            flash_type.to_s
        end
    end
end
flashメッセージを全体にわたって表示
app/views/layouts/application.html.erb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>
<head>
  <title>BasicWebsite</title>
  <meta name="viewport" content="width=device-width,user-scalable=no,maximum-scale=1" />
  <%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true %>
  <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
  <%= csrf_meta_tags %>
</head>
<body>
<%= render 'shared/navbar' %>
<% flash.each do |key, value| %>
<div class="alert <%= bootstrap_class_for(key) %>"><%= value %></div>
<% end %>
<%= yield %>
</body>
</html>

3.deviseでユーザーモデルを作成
$ rails g devise user
$ rake db:migrate
nameとemailという2つの情報をもったユーザーモデルを作成しているので
nameという情報を追加するためのマイグレーションを作成
$ rails generate migration add_name_to_users name:string
$ rake db:migrate

4.入力値の値を設定するユーザー検証を行う
app/models/user.rb
1
validates :name,  presence: true, length: { maximum: 50 }
を挿入する。

5.ユーザーの情報を表示するページを作成
$ rails generate controller Users show
config/routes.rb
1
2
3
devise_for  :users
resources :users, only: [:show]
root 'pages#home'
app/controllers/users_controller.rb
1
2
3
4
5
6
class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
  end
end
ユーザー情報を表示するview
app/views/users/show.html.erb
1
2
3
4
5
6
7
8
9
10
<% provide(:title, @user.name) %>
<div class="row">
  <aside class="col-md-4">
    <section>
      <h1>
        <%= @user.name %>
      </h1>
    </section>
  </aside>
</div>
ここまでで、実際にページ作成が行われているか確認
$ rake db:migrate RAILS_ENV=production
$ bundle exec rake assets:precompile RAILS_ENV=production
$ sudo service httpd restart
http://*****/users/sign_up
(*****)はお使いの独自ドメイン。
これで完了です。

0 件のコメント:

コメントを投稿