2016-11-21 53 views
1

我想知道如何讓特定用戶(不是current_user)退出。如何讓特定用戶(不是current_user)在rails-devise網站上註銷?

我看到了這個http://www.rubydoc.info/github/plataformatec/devise/master/Devise/Controllers/SignInOut#sign_out-instance_method並製作了這段代碼。

def kick_admin 
    user = User.find params[:user_id] 
    user.admin = false 
    user.save 
    sign_out user #want to kick him. 
end 

但它不會讓該用戶註銷但讓我(current_user)退出。 什麼是使用sign_out方法的正確方法?

我檢查了這個答案(Sign out specific user with Devise in Rails),但沒有幫助。

回答

2

您可以這樣做的一種方法是在用戶表中創建一個新屬性,將其稱爲force_sign_out

def kick_admin 
    user = User.find params[:user_id] 
    user.update_attributes(admin: false, force_sign_out: true) 
end 

而且具有這樣如果用戶嘗試的任何活動他簽署了

class ApplicationController < ActionController::Base 

    before_action :check_if_force_sign_out 

    def check_if_force_sign_out 
    return unless current_user.force_sign_out 
    current_user.update_attributes(force_sign_out: false) # reset for non-admin log in 
    sign_out 
    redirect_to root_path 
    end 

end 
+0

在ApplicatonController行動之前正要張貼類似這樣的東西。好的解決方案 –

+1

kick - 'user.update_attributes(admin:false,force_sign_out:true)可能會有所改進' –

+1

@DamienRoche好建議!根據您的評論進行編輯。 – SteveTurczyn