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
了。 - 如果像我一樣是個人部落格就可以刪除註冊頁面了(笑)不過這也是因為我考慮到要掌握帳戶。
- 打開終端機、在專案目錄打