railsでパスワード暗号化

パスワードの暗号化の方法について書きます。

参考URL:bcrypt-rubyをRailsで使う - ばくのエンジニア日誌

 

パスワードの暗号化にはbcrypt-rubyというgemを使います。

gemのインストール

 Gemfileでbcrypt-rubyをコメントインします。

# To use ActiveModel has_secure_password
  gem 'bcrypt-ruby', '~> 3.0.0'

modelの編集

 DBにはpassword_digestというカラムを用意しておきます。
一方モデル側には、passwordpassword_digestにアクセスできるようにしておくのと、has_secure_passwordを宣言しておきます。

class User < ActiveRecord::Base
  has_secure_password
  attr_accessible :id, :user_name, :password, :password_digest
end

viewの編集

 フォームではpassword_digestではなく、passwordを使います。

<%= form_for @user do |f| %>
  <div class="field">
    <%= f.label :password %><br />
    <%= f.password_field :password %>
  </div>

controllerの編集

contorollerでは特に特別なことはしません。普通に保存、更新するのみ。

def create
  @shop = Shop.new(params[:shop])
  @shop.save
end

def update
  @shop = Shop.find(params[:id])
  @shop.update_attributes(params[:shop])
end

 

railsで楽観的ロック

railsで楽観的ロックを実現する方法について記載します。

ほぼ下記リンクの通りでできた気がするけど、復習のため。

Ruby on Rails 備忘録 – Ride On Rails » Blog Archive » ActiveRecordによる楽観的ロック

 

とりあえず、lock_versionカラムを追加する

$ rails generate migration add_lock_version_to_reserves lock_version:integer

 migrationファイルが作成されるので以下のような感じにする。

class AddLockVersionToReserves < ActiveRecord::Migration
  def change
    add_column :reserves, :lock_version, :integer, default: 0
  end
end

フォームがあるビューには以下のようにhidden_field_tagでlock_versionを渡すようにする。

<%= form_for @reserve do |f|  %>
  <%= f.hidden_field :lock_version %>

 lock_versionカラムの存在によって、更新時にlock_versionの値が書き換わっていた場合はActiveRecord::StaleObjectError例外が発生するようになり、これをrescueすることでロールバックが行えるようになる。

def update
  @reserve = Reserve.find(params[:id])
  ActiveRecord::Base.transaction do
    @reserve.update_attributes!(params[:reserve])
  end

  redirect_to reserves_path, notice: message

  rescue ActiveRecord::StaleObjectError
    redirect_to reserves_path, alert: "他の人によって変更されました。"
  rescue => e
    puts e
    puts e.backtrace
    redirect_to reserves_path
end

ちなみにupdate_attributesだと楽観的ロックが効くけど、saveだと効かないので注意!

 

railsでQRコードを表示する

railsに限らずWEBアプリ全般やけど、WEBページにQRコードを表示するにはGoogle Chart APIが使える。

下記の参考にしたページを参考にしました。

http://stenlink.tumblr.com/post/12924173590/generate-qr-codes-in-rails-3

 

QRコードに限らず、いろいろなグラフの描画が可能。

Google Chart API入門

 

railsで管理画面

タイトルの通り、railsで管理画面を実装してみる。

rails_adminというgem?実行可能エンジン?を使う。

基本的には下記のページの通り。

http://d.hatena.ne.jp/hichiriki/20120126

http://rubyonrails.gachinko.org/gem/rails-admin/

祝ブログ開設

なんとなくブログを開設してみた。

とりあえず、2013年度中の目標というか最低限やるべきことを書き連ねてみる。

残り半年。

javascript関連の本を2冊読む

CSSの本を一冊読む

ruby on rails関連の本を2冊読む(既に1冊は達成)

・テニスの試合に出る

とりあえず、この辺で。