2017-03-18 10 views
0

私は別のユーザーとしてサインインしたいですが、そのセッションは5分のような時間が過ぎると自動的に期限切れになります。deviseのサインイン機能でタイムアウトパラメータを渡す方法はありますか?

しかし、私のデフォルトの時間を期限切れには、私は

私は、ユーザーのリストを持っているForexample
config.timeout_in = 1.hour 

としてdevise.rbに設定し、1時間です。 1つは[email protected] もう1つは[email protected]

私は[email protected]としてログインしています。 今、私は私がサインアウトした後、

sign_out 

sign_in (:user, test_user_2)

などとして署名しかし、私の元のアカウントが[email protected]であるから、となります 、[email protected]としてログインしたいです私はちょうど開発目的のために[email protected]としてログインしています、私はそのセッションが自動的に1時間ではなく、ある時間(例えば5分)後にタイムアウトすることを望みます。

deviseのサインイン機能にタイムアウトパラメータを渡す方法はありますか?

答えて

2

これは少し難しいことです。 def timeout_in Deviseメソッドをオーバーライドすることで、ユーザーモデルのtimeout_inを動的に設定できます。それは直接あなたの質問に答えていませんが

# You could add a boolean onto the user if testing and set it to true once signed in with a testing user. 
# You can then somehow set it to false once the user signs out after testing a user. 

def timeout_in 
    if self.testing? 
    5.minutes 
    else 
    30.minutes 
    end 
end 

この問題の別の回避策は、以前の管理者に彼/彼女がテストで行われるたびに彼の前のアカウントに辞任する機能を許可するようになります。別のユーザーになるときに、セッション[:admin_logged_in]を前のユーザーのIDと設定できます。セッション[:admin_logged_in]が存在する場合は、ユーザーを再び管理者にしてテストユーザーにサインアウトするルートを作成できます。ユーザーが管理ユーザーになった後、セッション[:admin_logged_in]をクリアするだけで済みます。

def become_other_user 
    session[:admin_logged_in] = current_user.id 
    sign_out current_user 
    user = User.find(params[:id]) 
    sign_in(:user, user, { :bypass => true }) 
    redirect_to something_path 
end 


def become_admin_user 
    if session[:admin_logged_in].present? 
    if current_user 
     admin_user = User.find_by_id(session[:admin_logged_in]) 
     sign_out current_user 
     sign_in(:user, admin_user, { :bypass => true }) 
     session[:admin_logged_in].clear 
     flash.clear if flash.present? 
    end 
    end 
end 

# erb nav file 

<% if session[:admin_logged_in].present? %> 
    <%= link_to 'Switch To Admin', become_admin_user_path, class: '#' %> 
<% end %> 
+0

Davidさん、私は興味がありましたbtwオーバーライドできるデバイスメソッドはありませんか?デベロッパはセッションが存在するかどうかをチェックしますか? – user1735921

関連する問題