簡體   English   中英

在使用devise的Rails中:如何確定用戶是否已從其他瀏覽器注銷?

[英]In Rails using devise: How can I find out if a user has logged out from a different browser?

目前,我可以告訴用戶是否已經唱歌,並且已經在線了多長時間,但是我無法確定用戶何時從其他瀏覽器退出。 這是我到目前為止的當前代碼:

- if current_user
 = "(last login #{time_ago_in_words(user.current_sign_in_at)} ago) - #{user.current_sign_in_at ? 'currently online' : ''}"
- else
 = "(last login #{time_ago_in_words(user.current_sign_in_at)} ago)"

據我所知,Devise中對此沒有特定的規定。 您可以通過在數據庫中存儲特定於該用戶的唯一令牌來跟蹤特定用戶的會話。

創建遷移以添加用於存儲令牌的字段。

檢查每次注銷的令牌,您可以保存時間戳。

我認為,您知道用戶何時從哪個瀏覽器注銷。

希望能幫助到你!

你可以試試

將時間戳記存儲在會話中,以便在一段時間不活動后可以使會話超時。 如果使用Devise,則可以使用timeoutable模塊輕松實現此目的 這帶來了一個小難題:如果您將超時設置得太低,那么對於您的用戶來說將非常煩人。 但是超時時間越長,對安全性的用處就越小(如果攻擊者在超時之前進入,他們可以保持刷新以保持會話活動狀態)。

在服務器端跟蹤活動的會話ID(同時仍將實際的會話數據存儲在Cookie中)。 這意味着您可以隨時使會話無效。

添加SessionActivation模型以跟蹤哪些會話處於活動狀態。 這是遷移:

class AddUserActiveSessions < ActiveRecord::Migration
  def change
    create_table :session_activations do |t|
      t.integer :user_id,   null: false
      t.string :session_id, null: false
      t.timestamps
    end

    add_index :session_activations, :user_id
    add_index :session_activations, :session_id, unique: true
  end
end

這是課程:

class SessionActivation < ActiveRecord::Base
  LIMIT = 20

  def self.active?(id)
    id && where(session_id: id).exists?
  end

  def self.activate(id)
    activation = create!(session_id: id)
    purge_old
    activation
  end

  def self.deactivate(id)
    return unless id
    where(session_id: id).delete_all
  end

  # For some reason using #delete_all causes the order/offset to be ignored
  def self.purge_old
    order("created_at desc").offset(LIMIT).destroy_all
  end

  def self.exclusive(id)
    where("session_id != ?", id).delete_all
  end
end

對用戶模型進行一些更改:

class User < ActiveRecord::Base
  # ...

  has_many :session_activations, dependent: :destroy

  def activate_session
    session_activations.activate(SecureRandom.hex).session_id
  end

  def exclusive_session(id)
    session_activations.exclusive(id)
  end

  def session_active?(id)
    session_activations.active? id
  end


end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM