質問

当社のレールアプリを使用でゆった認証ユーザのセッション管理するというログインを同じアカウントから複数のコンピュータを殺に関するセッションにおいて、その他のコンピュータとの殺害は、ログイン情報を記憶させる"と特徴です。

だから、まるで自宅にログインのアプリ(確認ログイン情報を記憶させる"と).るものがないんだったらいいのでログイン(確認ログイン情報を記憶させる"と).そして、帰ったら、家に戻ったとしてもアプリとして再度ログインしてください。

どうせたいのですがログインから複数台のログイン情報を記憶させる"と機能して行くためにしてくれるので安心です。

役に立ちましたか?

解決

お犠牲一部のセキュリティによって、このレコード店ディスクユニオンの可能。方法に対応することができるでしょうめます。

のクラスをオーバーライドすることができmake_token方法をユーザモデルです。このモデルは、現在実施しております。

def make_token
  secure_digest(Time.now, (1..10).map{ rand.to_s })
end

ユーザーがログ、クッキー、 make_token 法と呼ばれる生成-保存するとともに、さらに新しい remember_token に作業を行うことができます。またその他の値とした独自のユーザーになると推測され、置き換えの make_token 方法。

def make_token
  secure_digest(self.some_secret_constant_value)
end

このトークンが変わることはありませんが、でもいつでもどこでも誰とでもとのトークン行のユーザーです。

これ以外の場合は、 handle_remember_cookie! 方法の authenticated_system.rb ファイルに対応することができるでしょうこの設定を変更方法です。

def handle_remember_cookie!(new_cookie_flag)
  return unless @current_<%= file_name %>
  case
  when valid_remember_cookie? then @current_<%= file_name %>.refresh_token # keeping same expiry date
  when new_cookie_flag        then @current_<%= file_name %>.remember_me 
  else                             @current_<%= file_name %>.forget_me
  end
  send_remember_cookie!
end

だがこのメソッドの呼び出しの方法には、ユーザーモデル refresh_token, remember_me, は、 forget_me.

  def remember_me
    remember_me_for 2.weeks
  end

  def remember_me_for(time)
    remember_me_until time.from_now.utc
  end

  def remember_me_until(time)
    self.remember_token_expires_at = time
    self.remember_token            = self.class.make_token
    save(false)
  end

  # 
  # Deletes the server-side record of the authentication token.  The
  # client-side (browser cookie) and server-side (this remember_token) must
  # always be deleted together.
  #
  def forget_me
    self.remember_token_expires_at = nil
    self.remember_token            = nil
    save(false)
  end

  # refresh token (keeping same expires_at) if it exists
  def refresh_token
    if remember_token?
      self.remember_token = self.class.make_token 
      save(false)      
    end
  end

すべてのこれらの方法をリセットのトークンである。 forget_me セットで nil, のに対し、他の二つのセットで返される値よ make_token.をオーバーライドすることができこれらの方法をユーザモデルを防止するためのリセット時にトークンが存在しない。このファーストベストアプローチは、ビジネス地区にあるいくつか追加のロジックの handle_remember_cookie! 方法がるおそれのあるものについてきます。

いま、オーバーライド remember_me_until, forget_me, は、 refresh_token ユーザモデルです。以下のすべます。

def remember_me_until(time)
  if remember_token?
    # a token already exists and isn't expired, so don't bother resetting it
    true
  else
    self.remember_token_expires_at = time
    self.remember_token            = self.class.make_token
    save(false)
  end
end

# 
# Deletes the server-side record of the authentication token.  The
# client-side (browser cookie) and server-side (this remember_token) must
# always be deleted together.
#
def forget_me
  # another computer may be using the token, so don't throw it out
  true
end

# refresh token (keeping same expires_at) if it exists
def refresh_token
  if remember_token?
    # don't change the token, so there is nothing to save
    true     
  end
end

おり、このことによっているほからお客様を保護する目的でのトークンを盗む.そのコストの決定につくることができます。

他のヒント

あなたはremember_tokenがこれを達成するためには何か変更することができます。あなたがそれを設定することができます:

self.remember_token = encrypt("#{email}--extrajunkcharsforencryption")

の代わりに

self.remember_token = encrypt("#{email}--#{remember_token_expires_at}")

今トークンに関する具体的な何もコンピュータや時間があると、あなたが複数のマシンからログインしたままにすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top