簡體   English   中英

在允許用戶使用devise(rails)登錄之前,請檢查用戶是否處於活動狀態

[英]Check if user is active before allowing user to sign in with devise (rails)

我正在使用devise並創建了一個名為:active的User字段,該字段為true或false。 在允許用戶登錄之前,我必須手動使用戶處於活動狀態(true)。至少這是意圖。 我已經嘗試過了...

class SessionsController < Devise::SessionsController
  # POST /resource/sign_in
  def create
    "resource/signin CREATE"
    self.resource = warden.authenticate!(auth_options)
    unless resource.active?
      sign_out
      redirect_to :sorry_not_active_url
      return
    end
    set_flash_message(:notice, :signed_in) if is_navigational_format?
    sign_in(resource_name, resource)
    respond_with resource, :location => after_sign_in_path_for(resource)
  end  
end

但是,這並不能捕獲用戶可以登錄的所有位置,例如,當用戶更改密碼時,站點將在之后自動自動登錄。 但是,如果用戶不活躍,則我不希望他們被允許登錄,而希望將他們重定向到sad_not_active_url。

如果用戶不活躍,阻止用戶登錄的最佳方法是什么?

謝謝。

將這兩種方法添加到您的用戶模型中,devise應該自動將其拾取-您不需要擴展Devise::SessionsController

def active_for_authentication?
  super && self.your_method_for_checking_active # i.e. super && self.is_active
end

def inactive_message
  "Sorry, this account has been deactivated."
end

Devise(如果您具有3.2以上的版本)現在支持(session)create中的block參數

# assuming this is your session controller

class SessionsController < Devise::SessionsController

def create
  super do |resource|
     unless resource.active?
      sign_out
      # you can set flash message as well.
      redirect_to :sorry_not_active_url
      return
    end
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM