我正在使用Deviate并创建了一个名为:active的用户字段,该字段可以是真的,也可以是假的.在允许用户登录之前,我必须手动激活用户(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

但是,这并不能覆盖用户可以登录的所有位置,例如,当用户更改密码时,站点会在用户更改密码后自动登录.但是,如果用户不是活动的,我不希望他们被允许登录,而是被重定向到一个抱歉的非活动url.

如果用户未处于活动状态,防止用户登录的最佳方法是什么?

谢谢您.

推荐答案

将这两种方法添加到你的用户模型中,Desive应该自动 Select 它们——你不需要扩展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

Ruby-on-rails相关问答推荐

DateTime的最小数据提交格式

我可以向 erb 变量插值添加一个类吗?

Rails:当 id 方法为非标准时构建关联

微软安全链接在页面加载前解锁用户

Ruby on Rails 中的多种布局

您如何查看在 Rails 中触发回调的关联模型?

Heroku 应用程序上的远程 mysql 数据库

ActiveRecord 包括.指定包含的列

Devise + Omniauth - 如何传递额外的参数?

如何在 Rails 中使用延迟作业(job)取消预定作业(job)?

Ruby 元素是否存在于数组中

什么是Ruby 用于 BESIDES 轨道?

Ruby on Rails:有条件地显示部分

Ruby on Rails:在模型中验证还是在数据库中验证更好?

如何验证 ActiveRecord 中邮箱字段的格式?

Rails:从视图内渲染视图(不是部分视图)

获取磁盘上 ActiveStorage 文件的路径

ruby/ruby on rails 内存泄漏检测

停止 Rails 为视图和助手生成规范测试?

如何在 Ruby 类/模块命名空间中翻译模型?