首页 > 解决方案 > 设计忽略自定义创建方法

问题描述

用户必须通过 devise's 注册后发送给他们的链接来确认他们的电子邮件帐户confirmable

现在,如果尚未确认其帐户的用户收到无用的错误:

Your email or password is incorrect.

我尝试将以下内容添加到 SessionsController:

def create
  user = User.where(email: params[:user][:email]).take
  unless user.confirmed?
    super
  end
  flash[:alert] = "Your account has not been confirmed."
end

我的路线是

  devise_for :users, path: 'users', controllers: {
    sessions: "users/sessions"
  }

但是,以任何用户身份登录(确认与否)似乎绕过了整个方法。(即使我输入了binding.pry。)

更新:

设计只忽略独特的create方法。如果我将 abinding.pry放入任何其他方法(newdelete)中,devise 会抓住它。

标签: ruby-on-railsdevisedevise-confirmable

解决方案


如果未确认用户,则不会调用会话创建,因此这就是您无法访问该create方法的原因。

尝试这个

class User < ActiveRecord
  
  protected
  
  def confirmation_required?
    false
  end
end

这将允许用户继续执行create操作,sessions_controller如果用户实际得到确认,您可以在那里进行测试。


推荐阅读