想當初學習自製登入系統真的有點辛苦呢,但 rails 中其實有厲害套件 Devise 可以幫你完成喔,但要能客製化出自己想要的東西也不是很容易的事情呢! 就先來針對基本的使用好好來了解一下吧。
Devise 可以做什麼?
rubygems介紹
這是一個很強大的會員系統建置套件,你可以看到下載次數破億就知道這套間多熱門了吧。
大部分會用到的就是基本的會員資料建立,他可以幫你做好資料庫密碼的加密 (salting),多數會拿來用的就是進行註冊登入的認證,讓一些區域透過認證的方法判斷是否有登入,限制特定功能的使用。其實可以用到的功能非常非常多,可以進到 github 看官方手冊介紹。
主要會用到的功能:
- 註冊/登入
- 第三方登入註冊串接
- 註冊登入驗證
- 忘記密碼、修改密碼
- 密碼改動及會員認證信
安裝
原始 Devise github
- 放到 gemfile 然後 bundle 進行安裝
gem 'devise'
- 產生 devise 設定檔
這邊將我們的 rails 專案導入 devise 的相關資料
rails generate devise:install
基本設置
- 設定寄信的 mailer 預設 url 位置
-
開發階段 development:
設置為 localhose:3000 的位置
config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
-
上線階段 production:
上線後可以將位置改為實際部屬位置
- 設置首頁位置 routes
加入 root 確定登入或是相關操作跳轉回去的位置
config/routes.rb
root to: "home#index"
- 通知訊息設定,notice 及 alert
預設已經寫好很多 notice 及 alert,application.htnl.erb 中有加入就可以看到。
app/views/layouts/application.html.erb.
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
補充一下這些通知預設的訊息:
預設都是英文,有需要調整成中文可以參考 i18n 套件的使用
https://guides.rubyonrails.org/i18n.html
建立 model
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
rails generate devise:views
使用這個指令可以建立套件預設的 view,
你可以調整需要的頁面連結,註冊、登入、忘記密碼等等,客製自己的版面
- sessions 登入相關
- registrations 註冊相關
- confirmations 帳號認證相關
- passwords 忘記密碼/密碼修改
- unlocks 上鎖帳號相關
- mailer 信件寄送內容相關
- shared 共同
- error_messages 錯誤訊息顯示
- link 所有連結彙整 (登入、登出、第三方登入註冊、忘記密碼...)
做到這邊就可以看到登入系統已經有可以使用基本的功能及畫面了
根據相關的路徑可以找到對應的畫面
/users/sign_up 註冊
/users/sign_in 登入
下一篇再來針對 controller 的使用,還有之前使用這個套件進行過的客製化部分做說明~
參考資料:
-
devise - github
-
Devise 快速上手