Laravel・PHP入門

PHPer初心者

【Ruby】Ruby on Railsでdevise使ってログイン機能を作る

Ruby on Railsでログイン機能を作ります。

何やらとても便利なdeviseというgemがあるそうなのでそれを使用します。

■ deviseをインストールする

vi Gemfile #Gemfileをvimで開く
gem 'devise' #deviseというgemをGemfileに記載する
bundle install #未インストールのgemfileをinstallする

 bundle installすると、gemの初期設定に必要な項目が表示されるので
それに沿って初期設定を実施します。

 

■ deviseの初期設定をする

1.認証URLの設定をする

config/environments/development.rbで下の方のurl_optionsを下記へ編集。

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

私はさくらのVPSを使っていたので、 IPアドレス000.00.000.00:3000と記載しました。

2.rootの行き先を指定する/モデルとコントローラーを作る

すでにrootが設定されていれば必要ありませんので、rake routesで確認します。

rake routes #リクエストに対応する行き先を確認する

f:id:fresh_engineer:20170728214231p:plain

上記は設定されています。
rootの行き先が設定されて
もし設定されてない場合はroutes.rbへ

root 'home#index' #homeは任意です、この後のCとMは合わせます

 を追記ください。

次にコントローラーとモデルを作成します。

rails g controller Home index #規約でControllerの1文字目は大文字

rails g devise home #規約でmodelは小文字

rake db:migrate

 

3.ログインとサインアップへのリンク設置

indexにログインとサインアップの画面を作成します。
<body>〜</body>の間へ作成ください。

Logged in as <strong><%= current_user.email %></strong>.
<%= link_to "Settings", edit_user_registration_path, :class => "navbar-link" %> |
<%= link_to "Logout", destroy_user_session_path, method: :delete, :class => "navbar-link" %>
<% else %>
<%= link_to "Sign up", new_user_registration_path, :class => 'navbar-link' %> |
<%= link_to "Login", new_user_session_path, :class => 'navbar-link' %>
<% end %>

 そして、どのページでもログイン情報が画面に出力するよう、
application.html.erbへ下記を追加します。

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

 

■起動を確認する 

rails server -b 0.0.0.0

 サーバーを起動し、localhost:3000へアクセス。
Sign upで自分の任意のアドレスを入力ください。

 

f:id:fresh_engineer:20170728222052p:plain

 

任意のアドレスにメールが届くので、
Confirm my accountをクリックし認証。

f:id:fresh_engineer:20170728222540p:plain

ログイン画面でログインができれば成功です。

 

ちなみにデータはmodel作成時にできたテーブルで確認できるので
mysqlを立ち上げ、use データベース名 -> select * from テーブル名 \G;により
sign up したデータを確認できます。

f:id:fresh_engineer:20170728223030p:plain

メールの認証ができていれば、confirmedの2箇所に
token付与、日時が記載されているはずです。 

 

カスタマイズなどはViewを作成してカスタマイズください。

以上です。