進度條

[Ruby on rails] 常用功能#02. 使用 [Devise 套件] 來完成重設密碼與Email確認信功能

會員系統是相當重要的一個功能,還好Devise都幫我們做好了!

作者: 進度條編輯群 更新日期:

此文章也有影片介紹,可以搭配影片一起學習!

01. [Devise] 重設密碼與Email確認信 (所屬課程)


以下正式開始文章


在 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粉絲團按讚喔!!

Small logo

進度條編輯群

進度條編輯團隊