devise 初探

一個網站光有 CRUD 是不夠的:如果你想做個人部落格,通常你會需要資料庫:透過資料庫搭配簡單程式,就再也不用直接寫一堆 HTML──你只要在後台程式專心寫文章就好。

問題來了:這是你的個人部落格。你要怎麼讓電腦只允許你寫文章?

你需要類似會員、管理員之類的東西。

那怎麼在 rails 實做?

用 devise 吧。

Rails Girls 的講解還挺充足的。只要照著做,簡易但堪用的認證機制就做出來了。

也可以參照 tinydenny 的短文。

如果你確定只有你會維護這個部落格,你甚至可以清空註冊頁面,只透過指令介面產生會員


我還是說說東西好了。

  1. 正常來說,當你的 rails g devise:install 裝好後,應該會有三個指示。

    1. config.action_mailer.default_url_options = { :host => 'localhost:3000' } :設定自動寄信的路徑。「如果忘記密碼了就寄信」功能就是透過這裡實現的。 ihower 有詳細的資訊,不過因為目前的部落格不需要我以外的人註冊、編輯,所以目前我不管它。
    2. application.html.erb 設定登入訊息,例如登入成功或失敗之類的......
    3. routes.rb 設定首頁要放在哪裡。
  2. 把 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 來看。

  3. rails g devise:views 指令產生一組網頁吧。不過,這網頁還要改就是了。

  4. 要作到「如果尚未登入,就不能編輯文章」很簡單:在編輯表格的網頁加上 user_signed_in? 就對了。

    問:為什麼 user_signed_in? 以及 current_user 這兩個方法很有用?

    答:user_signed_in? 是偵測用戶有沒有登入、current_user 則是撈出目前登入用戶的資料:例如 current_user.email 就是目前登入用戶的 email。光知道「這人有沒有登入」還有「目前登入用戶的資料」就足夠寫許多文章了。

  5. 如何用 console 製造用戶?

    1. 打開終端機、在專案目錄打 rails console
    2. 打下 User.create!({:email => "guy@gmail.com", :password => "111111", :password_confirmation => "111111" })
    3. User 是你的 Model 名、:email:password:password_confirmation 分別等同於我們在網頁打的 email、密碼、還有確認密碼。
    4. 以後,你的登入信件就是 guy@gmail.com、而密碼就是 111111 了。
    5. 如果像我一樣是個人部落格就可以刪除註冊頁面了(笑)不過這也是因為我考慮到要掌握帳戶。

Coming soon