2016-11-21 4 views
1

特定のユーザー(current_userではない)をサインアウトする方法を知りたい。rails-deviseのウェブサイトで特定のユーザ(current_userではない)をサインアウトする方法を教えてください。

この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

これを行う方法の1つは、ユーザーテーブルに新しい属性を作成することです(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

キックの可能な改善 - 'user.update_attributes(admin:false、force_sign_out:true)' –

+1

@DamienRoche良い提案!あなたのコメントごとに編集。 – SteveTurczyn

関連する問題