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
というカラムを用意しておきます。
一方モデル側には、password
とpassword_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で管理画面
タイトルの通り、railsで管理画面を実装してみる。
rails_adminというgem?実行可能エンジン?を使う。
基本的には下記のページの通り。
祝ブログ開設
なんとなくブログを開設してみた。
とりあえず、2013年度中の目標というか最低限やるべきことを書き連ねてみる。
残り半年。
・javascript関連の本を2冊読む
・CSSの本を一冊読む
・ruby on rails関連の本を2冊読む(既に1冊は達成)
・テニスの試合に出る
とりあえず、この辺で。