Railsでログイン処理っぽいものを作ってみる
RailsをMySQLに対応させてみるの続き
(RailsのMySQLの環境にアクセスできるようにしておくも済ませておく)
下記のサイトを参考にして、ログイン処理を作ってみる。
【参考】 Ruby on Rails ログイン画面の作成 - ayaketanのプログラミング勉強日記 http://ayaketan.hatenablog.com/entry/2012/12/19/210231
gemのインストール
まず必要なgemをインストールする。
$ vi Gemfile gem 'bcrypt-ruby', '~> 3.1.2' ←コメントを外す
$ bundle install
ユーザーのモデル
次に、ユーザーを管理するモデルを作成して、テーブルを作成する。
$ rails generate model user name:string password_digest:string $ rake db:migrate
モデルの設定を追加する。
$ vi app/models/user.rb
lass User < ActiveRecord::Base has_secure_password ←追加 end
ユーザー追加
コンソールからユーザーを追加する。
$ rails console irb(main):001:0> User.create!(:name => "admin", :password => "test", :password_confirmation => "test") irb(main):002:0> exit
下記のような感じで追加される。
mysql> select * from users; +----+-------+----------------------------+---------------------+---------------------+ | id | name | password_digest | created_at | updated_at | +----+-------+----------------------------+---------------------+---------------------+ | 1 | admin | $2a$10$38u…xGprZovHge9geO | 2014-03-15 05:07:49 | 2014-03-15 05:07:49 | +----+-------+----------------------------+---------------------+---------------------+
ビューの実装
ログイン用のビューを作成する。
$ mkdir app/views/sample
$ vi app/views/sample/index.html.erb
<%= @msg %><br /> <%= form_tag('/') do %> ユーザー名:<%= text_field_tag :name %><br /> パスワード:<%= text_field_tag :pass %><br /> <%= submit_tag 'ログイン' %><br />
postできるようroutes.rbに追加する。
$ vi config/routes.rb post '/' => 'sample#index' ←追加
コントローラの実装
ログイン用の処理を作成する。
$ vi app/controllers/sample_controller.rb
class SampleController < ApplicationController def index if session[:login] then @msg = session[:login] + 'でログイン中です' end if params.key?(:name) || params.key?(:pass) user = User.find_by_name params[:name] if user && user.authenticate(params[:pass]) session[:login] = params[:name] @msg = 'ログインしました' else session[:login] = nil @msg = 'ユーザー名またはパスワードが間違っています' end end end end