2

timeoutable モジュールの Devise ソース コードを理解しようとしていますメソッドで何が起こっているのか、私は本当に混乱していtimedout?ます。

直感的に、パラメーターなしで呼び出すことができるはずですuser.timedout?。ユーザーのセッションがタイムアウトした場合は true を返し、そうでない場合は false を返します。誰かがこのパラメータが何をしているのか説明できますか?

編集:わかりました。したがって、このメソッドは、最終アクセス時刻が既にわかっている
場合にのみ、ユーザーがタイムアウトしたかどうかを確認できるようです。次の質問は、別のユーザーがタイムアウトしたかどうかを確認する最もクリーンな方法は何ですか? (current_user ではありません)。つまり、上記の方法でパラメーターなしで呼び出すにはどうすればよいでしょうか?timedout?

4

1 に答える 1

2

Devise は Warden を使用して最後のリクエスト時刻を保存します (last signed_in_time ではありません)。参照: https://github.com/plataformatec/devise/blob/master/lib/devise/hooks/timeoutable.rb

したがって、この機能を複製したい場合は、last_request_time をデータベースに保存し、リクエストごとに更新する必要があります (application_controller の after_filter で)。

それができたら、このメソッドをユーザーに追加し、それを使用してデバイスのタイムアウトに委任できますか? 方法:

class User < ActiveRecord::Base
  devise :timeoutable, :trackable #etc

  def expired?
    valid_until = last_access_time + 30.minutes
    timedout?(valid_until)
  end

end

次に、ユーザーがいる場合:

user.expired?
于 2012-06-03T16:00:40.510 に答える