[Ruby on rails] 常用功能#02. 使用 [Devise 套件] 來完成重設密碼與Email確認信功能
會員系統是相當重要的一個功能,還好Devise都幫我們做好了!
此文章也有影片介紹,可以搭配影片一起學習!
在 Rails 中使用最常使用的「會員系統」套件就為 Devise 莫屬了,透過這個套件的協助,可以完成一個網站最基本使用者登入、登出、註冊等等功能.....
因為上一篇文章講的是Email相關的內容,所以本文章要講的是Devise中的2個與Email相關的狀況:
1. 重設密碼。
2. 會員註冊確認信。
所以接下來就針對此功能做一個詳盡的解說:
安裝 Devise Gem:
請先到 RubyGem 官方搜尋 Devise 這個套件。
網站: RubyGem 官方
請把此版版號,複製到 gemfile 資料夾。
請別忘記在終端機要輸入 bundle intall 把所要使用的套件,安裝/載入到 rails 裡。
此套件的下載此數及 Github 的星星數是很驚人的。
Gemfile 資料夾是存放 RubyGem 的地方。
官方說明文件:
在安裝好套件時,請務必要到此套件的官方文件,查看如何使用及需要注意的事項。Devise Github官方連結
使用任何工具都需要說明書,所以當好一個工程師的第一步不是看程式碼,而是看說明!(相當重要)
安裝完Gem 以後請在終端機輸入
rails generate devise:install
它會執行預設的動作,產生些使用devise必須的檔案
接著要產生Model,因為devise有自己的Table表要使用,所以需要產生出Migration跟Model相關檔案,但是因為可以客製化,所以Model的名稱可以自己改,比方說你可以使用常見的User, 或是admin, 或是Member之類的。這邊我們用預設的User來示範。 請在終端機輸入
rails generate devise User
(這裡的要取名我們常用的,這裡就使用最常用的 User)。
建立好 model 時,請記得在終端機輸入 rails db:migrate 執行Migration
最後請記得重開 server,不然會出現錯誤訊息。
以上這些Devise的 Getting started 都有寫,所以可以嘗試自己看懂它。
註冊帳號:
請使用 Devise gem 所給的路徑,註冊一個帳號,帳號信箱就請各位隨意,但是Email之後要寄信過去,所以需要是真的。
註冊完會顯示下圖,因為沒CSS樣式所以看起來比較單調
加入簡易的登入、登出按鈕,也可以參考Devise wiki,程式碼如下圖所示,是接續前一個教學,所以程式碼看起來比較多一點。
重設密碼:
請在 Email 部分,輸入一個常用的信箱來做收信完成改密碼的動作。
此錯誤訊息時,在 Email 的地方,不得空白。
成功送出信件的話,請至信箱查看,應該會收到一個系統發出的信。
點選 change my password 可更改密碼。
需注意的是,此信件為一次性的信件,意思是透過此信件更改密碼後,此信件便作廢,不能再用。
選起來的網址,為一次性的 token,使用過之後便作廢。
更改成功收到的訊息通知。
接下來是Email確認信,參考Devise wiki
此頁面會告訴我們如何完成確認信這個功能。
第一個動作是,是要開啟確認信這個功能,預設的Devise是沒有打開的要自己加,加進models/user.rb或是你用devise產生出來的model。
第二個動作是,要新增加一些資料庫欄位(columns)到此 user tables 裡。
請在終端機輸入 rails g migration add_confirmable_to_devise。
加的內容如下圖,有點多,但都是官方指示的
最後,請記得在終端機輸入 rails db:migrate 執行migration。
第三個動作是,請在終端機輸入 rails c 把剛建立好的 user 資料都刪掉。
刪掉前請記得要重開開啟 server,不然會出現錯誤訊息。
輸入 User.last.destroy。
接下來請在重新註冊一次帳號,會出現以下的訊息。
預設是打開的,因為我們在Migration的時候沒有加入這欄位,所以我們必須關掉此功能。此功能是當Email有做變動時,需要再次confirm email才會真的變更。
路徑為 config/initializers/devise.rb,將 config.reconfirmable = true 改為 false。
再來回到動作三,把剛建立的 User 資料清掉,重做一次。
另外,有更動到 config 內的資料,server 請務必要重開。
此時,請再重新註冊帳號,看到以下訊息,就是成功了。
成功時,所收到的訊息。
另外,在 rails 的保護機制下, 未點選信箱中的確認信之前,去登入註冊的帳號是沒有作用的。
點完以後就成功了!
最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!