devise 初探
一個網站光有 CRUD 是不夠的:如果你想做個人部落格,通常你會需要資料庫:透過資料庫搭配簡單程式,就再也不用直接寫一堆 HTML──你只要在後台程式專心寫文章就好。
問題來了:這是你的個人部落格。你要怎麼讓電腦只允許你寫文章?
你需要類似會員、管理員之類的東西。
那怎麼在 rails 實做?
Rails Girls 的講解還挺充足的。只要照著做,簡易但堪用的認證機制就做出來了。
如果你確定只有你會維護這個部落格,你甚至可以清空註冊頁面,只透過指令介面產生會員。
我還是說說東西好了。
-
正常來說,當你的
rails g devise:install裝好後,應該會有三個指示。config.action_mailer.default_url_options = { :host => 'localhost:3000' }:設定自動寄信的路徑。「如果忘記密碼了就寄信」功能就是透過這裡實現的。 ihower 有詳細的資訊,不過因為目前的部落格不需要我以外的人註冊、編輯,所以目前我不管它。- 去
application.html.erb設定登入訊息,例如登入成功或失敗之類的...... - 去
routes.rb設定首頁要放在哪裡。
-
把 devise 的 Model 做出來(
rails generate devise user)然後產生一個資料庫吧(rake db:migrate)問:所以 Rails Girls 說的,到底是產生了什麼 Model,產生了什麼欄位?
答:按照剛才的
rails generate devise user指令,我們產生了user這個 Model。至於產生了什麼欄位,可以去db/migrate/xxxx...devise_create_users.rb來看。 -
用
rails g devise:views指令產生一組網頁吧。不過,這網頁還要改就是了。 -
要作到「如果尚未登入,就不能編輯文章」很簡單:在編輯表格的網頁加上
user_signed_in?就對了。問:為什麼
user_signed_in?以及current_user這兩個方法很有用?答:
user_signed_in?是偵測用戶有沒有登入、current_user則是撈出目前登入用戶的資料:例如current_user.email就是目前登入用戶的 email。光知道「這人有沒有登入」還有「目前登入用戶的資料」就足夠寫許多文章了。 -
如何用 console 製造用戶?
- 打開終端機、在專案目錄打
rails console。 - 打下
User.create!({:email => "guy@gmail.com", :password => "111111", :password_confirmation => "111111" }) User是你的 Model 名、:email、:password、:password_confirmation分別等同於我們在網頁打的 email、密碼、還有確認密碼。- 以後,你的登入信件就是
guy@gmail.com、而密碼就是111111了。 - 如果像我一樣是個人部落格就可以刪除註冊頁面了(笑)不過這也是因為我考慮到要掌握帳戶。
- 打開終端機、在專案目錄打