iT邦幫忙

DAY 23
1

Ruby on Rails 實戰聖經 - 初心者的30天學習記錄系列 第 23

Ruby on Rails (23) - 修改User Model

  • 分享至 

  • xImage
  •  

在新增user model時,我們只設定了兩個欄位: name, email,還需要新增password讓user可以驗證登入。
所以我們需要利用migration來修改user model的欄位。

在那之前,我們要先為密碼加密,Rails有一個gem叫作bcrypt可以為我們做這件事。

這個gem會幫我們把密碼轉換成一個難以破解的隨機字串。當user輸入密碼時,密碼會自動轉換,並跟存在資料庫的字串做比對。也就是說,我們不需要儲存用戶原本的密碼,這樣即使被駭客入侵,用戶的資料也不會洩漏。

直接編輯Gemfile將下面這行程式註解掉:

use ActiveModel has_secure_password
gem 'bcrypt', '~> 3.1.7'

並執行$ bundle install安裝這個gem。
要記得,每次修改Gemfile後都要重新執行這個指令。

利用Migration新增欄位

執行以下程式,在user model新增一個欄位password_digest(密碼文摘,即加密過的密碼)

rails g migration AddUserPasswordDigest

並編輯此檔案,修改change方法,利用migration的add_column方法來修改users table

class AddUserPasswordDigest < ActiveRecord::Migration
def change
add_column :users, :password_digest, :string
end
end

接下來,編輯app/model/user.rb
加入has_secure_password這個方法,這個方法可以暫時儲存密碼即雙重確認密碼(確認密碼只是用於認證的時候,不會儲存到資料庫裡)

class User < ActiveRecord::Base
has_secure_password
end

最後,每當建立或修改migration時,必須執行這個migration來更新資料庫

$ rake db:migrate

rails會自動按照時間戳記來執行尚未執行過的migration,如以下執行結果:
== 20141021160437 CreateUsers: migrating ======================================
-- create_table(:users)
-> 0.0011s
== 20141021160437 CreateUsers: migrated (0.0011s) =============================

== 20141022153736 AddUserPasswordDigest: migrating ============================
== 20141022153736 AddUserPasswordDigest: migrated (0.0000s) ===================


上一篇
Ruby on Rails (22) - 建立專案及Model、Migration
下一篇
Ruby on Rails (24) - 驗證資料格式
系列文
Ruby on Rails 實戰聖經 - 初心者的30天學習記錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言