Conclusion
終於把註冊和登入功能做完,實現使用者的驗證功能之後,就可以根據登入狀態和使用者的身份來限制對特定頁面的訪問權。下一節會繼續實作編輯使用者資訊的功能。
現在來合併一下:
$ bundle exec rake test
$ git add -A
$ git commit -m "Finish log in/log out"
$ git checkout master
$ git merge log-in-log-out
然後 push、deploy:
$ bundle exec rake test
$ git push
$ git push heroku
$ heroku run rake db:migrate
注意如果只是 push 到 Heroku 上,APP 並無法實際作用,因此必須執行遷移。在擁有龐大流量的 production 環境中,更新前最好先開啟 maintenance mode 的模式:
$ heroku maintenance:on
$ git push heroku
$ heroku run rake db:migrate
$ heroku maintenance:off
這樣做的話會在部署和執行遷移時產生一個標準的錯誤頁面,詳情請看 Heroku 的文件說明: error pages。
學到什麼?
- Rails 可以使用暫時 cookie 和持久 cookie 維持頁面之間的狀態
- 登入表單是用來建立一個新的 session,好讓使用者登入
flash.now方法是用來在重新渲染(render)的頁面顯示 flash messages- 使用 TDD 可以用來在測試中重現問題
session方法可以讓我們把使用者 ID 安全的存進瀏覽器裡,建立暫時 session- 可以根據登入狀態修改功能,例如佈局中顯示的連結
- 整合測試可以檢查路由、資料庫更新和對佈局的修改
- 為了實作持久性 session,我們為使用者產生了 remember token 和相對應的 remember digest
cookies方法可以在瀏覽器的 cookie 裡面儲存持久的 remember token,實現持久性 session- 登入狀態取決於有沒有目前的使用者,而目前的使用者,可以透過短暫 session 的 user ID 或是持久性 session 中唯一的 remember token 獲得
- 使用者登出的功能會透過刪除 user ID 和刪除瀏覽器中的持久 cookie 實現
- 三元運算子可以撰寫簡潔的 if-then 述句