本篇重點在於session
什麼是session
一種紀錄某種資料,並可以利用這個資料的機制。
瀏覽器如何在用戶登入時應用session?
網站會在用戶瀏覽器建立session,在用戶登入後,網站可以查詢用戶瀏覽器內建立的session,用以知道現在登陸的用戶是哪一位。
Rails如何使用session實踐登入登出功能?
Rails裡面,controller可以訪問session裡面的Hash資料。
ctrlp>config/routes.rb
增加一條route
get 'sandbox', to: 'root#sandbox' if Rails.env.develpoment?
SessionToken(時域代幣)
資料庫的設定
建立一個新的migration來新加入一個欄位,創一個migration檔案
$ rails genrate migration AddUserSessionToken
然後在db/migrate/XXXXX_add_user_session_token.rb檔案裏面,設定要新增的欄位詳細資料
def change
add_column :users, session_token, :string
add_index :users, session_token, unique:true
end
然後,把資料庫設定實現。
$ rails db:migrate
更新User model的檔案(user.rb)
before_save {self.session_token ||= Digest:SHA1.hexdigest(SecureRandom.urlsafe_base64.to_s) }
我的說法,在儲存之前,要準備一個變數session_token,假如原來沒有session_token的話,那就要創造一個(||=)。
書上的說法,當每建立/修改/儲存一個用戶的時候,系統都會產生一個token。但是,現已存在的用戶都還沒有token,所以必須手動在console裡面幫他們建立token
rails c
User.all.each { |user| user.save(validate: false) } 每一個user,都儲存。並且建立新的token
User.first.session_token 檢查有沒有建立token成功
如何controller能夠與session配合實現登入/登出/檢查的功能?
controller可以使用new create destroy三種功能來使用session。
session#new登入
session#create登入動作
session#destroy登出動作
參考自10天學會ruby on rails :web 2.0網站架設速成
沒有留言:
張貼留言