進入 ruby 世界之後,無非就是希望可以使用 rails 框架來幫助你達到快速及 RESTful 的開發方式,在 rails 世界其實擁有許多強力的裝備,可以幫你擊退沿路的困難,就是我們所謂的套件 (packages)。

想當初學習自製登入系統真的有點辛苦呢,但 rails 中其實有厲害套件 Devise 可以幫你完成喔,但要能客製化出自己想要的東西也不是很容易的事情呢! 就先來針對基本的使用及客製方式好好來了解一下吧。

Devise 可以做什麼?

rubygems 介紹
這是一個很強大的會員系統建置套件,你可以看到下載次數破億就知道這套間多熱門了吧。
大部分會用到的就是基本的會員資料建立,他可以幫你做好資料庫密碼的加密 (salting),多數會拿來用的就是進行註冊登入的認證,讓一些區域透過認證的方法判斷是否有登入,限制特定功能的使用。其實可以用到的功能非常非常多,可以進到 github 看官方手冊介紹。

主要會用到的功能:

  • 註冊/登入
  • 第三方登入註冊串接
  • 註冊登入驗證
  • 忘記密碼、修改密碼
  • 密碼改動及會員認證信

安裝

原始 Devise github

  1. 放到 gemfile 然後 bundle 進行安裝
1
gem 'devise'
  1. 產生 devise 設定檔
    這邊將我們的 rails 專案導入 devise 的相關資料
1
rails generate devise:install

基本設置

  1. 設定寄信的 mailer 預設 url 位置
  • 開發階段 development:
    設置為 localhose:3000 的位置
    config/environments/development.rb
1
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
  • 上線階段 production:
    上線後可以將位置改為實際部屬位置
  1. 設置首頁位置 routes
    加入 root 確定登入或是相關操作跳轉回去的位置
    config/routes.rb
1
root to: "home#index"
  1. 通知訊息設定,notice 及 alert
    預設已經寫好很多 notice 及 alert,application.htnl.erb 中有加入就可以看到。
    app/views/layouts/application.html.erb.
1
2
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>

補充一下這些通知預設的訊息:

  • notice:

    • 預設登入登出提醒資訊
    • 信件寄出相關
  • alert:

    • 資料填寫驗證有誤相關

預設都是英文,有需要調整成中文可以參考 i18n 套件的使用
https://guides.rubyonrails.org/i18n.html

建立 model

1
rails generate devise MODEL

透過內建指令產生 model 及 migration,上面標示的 MODEL(通常用 user) 可以用別的但會影響預設的 controller 跟 view 位置及名稱,可以到 db/migrate 查看產生的 migration 檔案

執行後 rails 會自動產生 migration、model、route 等。
Devise 有提供多達 10 個模組,可以取消 migration 內的註解開啟這些資料欄位紀錄:

  1. Database Authenticatable 加密並儲存密碼於資料庫,當使用者登入時比對驗證身份。驗證機制可以透過 POST 請求或者 HTTP 基本的驗證方式。
  2. Omniauthable 支援 OmniAuth 第三方認證標準 (https://github.com/intridea/omniauth)
  3. Confirmable 寄送 Email 來驗證帳號是否啟用、並且確認會員是否已註冊過
  4. Recoverable 可以重設密碼與發送密碼更改的通知信件
  5. Registerable 處理註冊流程,且會員可編輯相關資料、刪除個人帳號
  6. Rememberable 管理 Token 的產生與清除,使用者的部分資訊會被存在客戶端的 cookie,(達成跳轉頁面時,不必一再登入)
  7. Trackable 追蹤登入的紀錄(像是次數,時間與 IP)
  8. Timeoutable 超過一定時間使用者未操作網站,sessions 會過期
  9. Validatable 提供信箱和密碼的驗證。此功能可以視情況客製化,自行定義驗證方式。
  10. Lockable 當帳號不斷登入失敗時會鎖住。同時發送 Email 來驗證解鎖。

確定好要開啟的功能之後,記得 db:migrate

產生預設相關 view

1
rails generate devise:views

使用這個指令可以建立套件預設的 view,
你可以調整需要的頁面連結,註冊、登入、忘記密碼等等,客製自己的版面

  • sessions 登入相關
  • registrations 註冊相關
  • confirmations 帳號認證相關
  • passwords 忘記密碼/密碼修改
  • unlocks 上鎖帳號相關
  • mailer 信件寄送內容相關
  • shared 共同
    • error_messages 錯誤訊息顯示
    • link 所有連結彙整 (登入、登出、第三方登入註冊、忘記密碼…)

做到這邊就可以看到登入系統已經有可以使用基本的功能及畫面了
根據相關的路徑可以找到對應的畫面

/users/sign_up 註冊

/users/sign_in 登入


下一篇再來針對 controller 的使用,還有之前使用這個套件進行過的客製化部分做說明~


參考資料:

  1. devise - github
  2. Devise 快速上手