Pertanyaan Paksakan pengguna untuk keluar dalam Rancangan


Saya memiliki aplikasi di mana pengguna memiliki keanggotaan yang kedaluwarsa.

Saya sedang berusaha menyiapkan a before_filter di dalam saya applications.rb file untuk memeriksa apakah keanggotaan mereka aktif sebelum membiarkan mereka di situs.

Di file application.rb saya:

before_filter :check_account

def check_account
  if user_signed_in?
     if current_user.account.expired
       flash[:error] = "Your account is expired. Please contact Navanti for renewal."
       redirect_to destroy_user_session_path
     end
  end
end

Saya terus mendapatkan kesalahan pengulangan loop. Saya menduga itu karena halaman logout yang dipanggil juga melakukan itu before_filter, tetapi jika saya meletakkan except => [:users => :sign_out] itu masih melempar kesalahan loop.

Terima kasih untuk bantuannya.


Metode Rancangan yang Diminta:

# DELETE /resource/sign_out

def destroy
  redirect_path = after_sign_out_path_for(resource_name)
  signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
  set_flash_message :notice, :signed_out if signed_out && is_navigational_format?  

  # We actually need to hardcode this as Rails default responder doesn't
  # support returning empty response on GET request
  respond_to do |format|
    format.any(*navigational_formats) { redirect_to redirect_path }
    format.all do
      head :no_content
    end
  end
end

6
2017-10-02 17:14


asal


Jawaban:


Coba pertanyakan pengontrol / tindakan dengan cara berikut:

def check_account
  return if params[:controller] == "devise/sessions" && params[:action] == "destroy"
  if user_signed_in?
     if current_user.account.expired
       flash[:error] = "Your account is expired. Please contact Navanti for renewal."
       redirect_to destroy_user_session_path
     end
  end
end

Ini harus menghilangkan loop pengalihan yang Anda miliki.


7
2017-10-02 18:17