基本的なユーザー登録とログイン機能を実装するためのRuby on Railsチュートリアル
Railsでユーザ登録とログインを実装するのはとても簡単で、たとえばDeviseのような完全に機能するgem拡張を使用します。また、Rails独自のhas_secure_passwordを使って自作することもできます。ここでは、has_secure_passwordを使ってユーザー登録とログインを実装する試みを紹介します。
動作の準備
プロジェクトを作成します。
int nrAttributes;
glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes);
std::cout << "Maximum nr of vertex attributes supported: " << nrAttributes << std::endl;
has_secure_password の暗号化関数は bcrypt を必要としますので、プロジェクトで bcrypt gem パッケージを有効化する必要があります。プロジェクトのディレクトリに移動して、Gemfileファイルを以下のように修正します。
# Use ActiveModel has_secure_password
gem 'bcrypt', '~> 3.1.7'
保存して終了し、bundle install コマンドを実行して、新しく有効になった gem パッケージをインストールします。
user モジュールの作成
ユーザー情報を操作・管理するためには、ユーザーを保持するデータテーブルとモデルを作成する必要があります。
rails g model user name:string password_digest:string
password_digest このフィールドは、暗号化および難読化されたパスワード文字列を格納するために使用され、必ず指定しなければならず、他の名前に変更することはできません。そうでなければ、has_secure_passwordによって提供される機能で適切に動作しません。
次に、user モジュールに has_secure_password 関数を導入します。
# app/models/user.rb
class User < ActiveRecord::Base
has_secure_password
end
ユーザーデータ・テーブルを作成します。
rake db:migrate
登録機能の実装
ユーザー登録を処理する Applicant コントローラを作成します。
rails g controller applicants new create
応募者 コントローラは、2つのメソッドを提供します。
- new: 登録画面を処理するために使用されます
- create: 登録情報を保存するために使用します
上記のコマンドで作成されたコントローラのメソッドは、デフォルトですべて get リクエストを使用します。登録情報を保存する create メソッドは post リクエストを使用します。そのため、config/routes.rbで以下を変更する必要があります。
post 'applicants/create'
コントローラ関数の登録を終了します。
# app/controllers/applicants_controller.rb
class ApplicantsController < ApplicationController
def new
@user = User.new
end
def create
@user = User.create(user_params)
if @user.save
redirect_to :sessions_new
else
render "new"
end
end
private
def user_params
params.require(:user).permit(:name, :password, :password_confirmation)
end
end
登録画面機能を完成させる。
<! -- app/views/applicants/new.html.erb -->
<h1>Register</h1>
<% if @user.errors.any? %>
<ul>
<% @user.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
<%= form_for @user, url: :applicants_create do |f| %>
<p>
<%= f.label :name %>
<%= f.text_field :name %>
</p>
<p>
<%= f.label :password %>
<%= f.password_field :password %>
</p>
<p>
<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation %>
</p>
<p><%= f.button "submit" %></p>
<% end %>
登録機能を簡単に実装したものです。
ログイン機能の実装
ユーザーのログインとログアウトを処理するSessionコントローラを作成します。
rails g controller sessions new create
ここでは、セッションコントローラで2つのメソッドがデフォルトで作成されています。
- new: ログイン画面を処理するために使用されます
- createは、ログイン処理を行うために使用されます
登録と同様に、createのデフォルトルートをpostに変更する必要があります。
# config/routes.rb
post 'sessions/create'
セッションコントローラ機能を完成させる。
# app/controllers/sessions_controller.rb
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(name: user_params[:name]).try(:authenticate, user_params[:password])
if user
render plain: sprintf("welcome, %s!", user.name)
else
flash.now[:login_error] = "invalid username or password"
render "new"
end
end
private
def user_params
params.require(:session).permit(:name, :password)
end
end
セッションのログイン画面を完成させる。
<! -- app/views/sessions/new.html.erb -->
<h1>login</h1>
<% if flash[:login_error] %>
<p><%= flash[:login_error] %></p>
<% end %>
<%= form_for :session, url: :sessions_create do |f| %>
<p>
<%= f.label :name %>
<%= f.text_field :name %>
</p>
<p>
<%= f.label :password %>
<%= f.password_field :password %>
</p>
<p><%= f.button "login" %></p>
<% end %>
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Ruby変数の詳細分析
-
ruby on railsのモデルアソシエーションについて解説
-
Mac OS XにRuby実行環境をインストールするための詳細な手順
-
Rubyのブロック機能をより深く理解するために
-
MongoDBに接続するためのRuby on Railsフレームワークアプリケーション チュートリアル
-
Rubyブロックチュートリアル
-
RubyとRuby on Railsフレームワーク環境構築の簡潔なチュートリアル
-
Rubyプログラムにおける正規表現の基本的な使い方に関するチュートリアル
-
Rubyでタスクビルダーのrakeを使い始める
-
Rubyの基本的な環境変数の設定と一般的なインタープリタコマンド