Rails 套件操作,Devise (安裝及基本設置)
進入 ruby 世界之後,無非就是希望可以使用 rails 框架來幫助你達到快速及 RESTful 的開發方式,在 rails 世界其實擁有許多強力的裝備,可以幫你擊退沿路的困難,就是我們所謂的套件 (packages)。
想當初學習自製登入系統真的有點辛苦呢,但 rails 中其實有厲害套件 Devise 可以幫你完成喔,但要能客製化出自己想要的東西也不是很容易的事情呢! 就先來針對基本的使用及客製方式好好來了解一下吧。
Devise 可以做什麼?
rubygems 介紹
這是一個很強大的會員系統建置套件,你可以看到下載次數破億就知道這套間多熱門了吧。
大部分會用到的就是基本的會員資料建立,他可以幫你做好資料庫密碼的加密 (salting),多數會拿來用的就是進行註冊登入的認證,讓一些區域透過認證的方法判斷是否有登入,限制特定功能的使用。其實可以用到的功能非常非常多,可以進到 github 看官方手冊介紹。
主要會用到的功能:
- 註冊/登入
- 第三方登入註冊串接
- 註冊登入驗證
- 忘記密碼、修改密碼
- 密碼改動及會員認證信
安裝
- 放到 gemfile 然後 bundle 進行安裝
1 | gem 'devise' |
- 產生 devise 設定檔
這邊將我們的 rails 專案導入 devise 的相關資料
1 | rails generate devise:install |
基本設置
- 設定寄信的 mailer 預設 url 位置
- 開發階段 development:
設置為 localhose:3000 的位置
config/environments/development.rb
1 | config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } |
- 上線階段 production:
上線後可以將位置改為實際部屬位置
- 設置首頁位置 routes
加入 root 確定登入或是相關操作跳轉回去的位置
config/routes.rb
1 | root to: "home#index" |
- 通知訊息設定,notice 及 alert
預設已經寫好很多 notice 及 alert,application.htnl.erb 中有加入就可以看到。
app/views/layouts/application.html.erb.
1 | <p class="notice"><%= notice %></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 內的註解開啟這些資料欄位紀錄:
- Database Authenticatable 加密並儲存密碼於資料庫,當使用者登入時比對驗證身份。驗證機制可以透過 POST 請求或者 HTTP 基本的驗證方式。
- Omniauthable 支援 OmniAuth 第三方認證標準 (https://github.com/intridea/omniauth)
- Confirmable 寄送 Email 來驗證帳號是否啟用、並且確認會員是否已註冊過
- Recoverable 可以重設密碼與發送密碼更改的通知信件
- Registerable 處理註冊流程,且會員可編輯相關資料、刪除個人帳號
- Rememberable 管理 Token 的產生與清除,使用者的部分資訊會被存在客戶端的 cookie,(達成跳轉頁面時,不必一再登入)
- Trackable 追蹤登入的紀錄(像是次數,時間與 IP)
- Timeoutable 超過一定時間使用者未操作網站,sessions 會過期
- Validatable 提供信箱和密碼的驗證。此功能可以視情況客製化,自行定義驗證方式。
- 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 的使用,還有之前使用這個套件進行過的客製化部分做說明~
參考資料: