使用有效信息设计无效的电子邮件或密码

时间:2014-06-02 15:56:54

标签: ruby-on-rails devise

以下是设置:

~/.rvm/gems/ruby-2.1.2/gems/devise-3.2.4
~/.rvm/gems/ruby-2.1.2/gems/rails-4.1.1
~/.rvm/gems/ruby-2.1.2/gems/mongoid-f9e6fdb1a67c

我面临着一个糟糕的错误,Devise除了在确认之后才会接受用户签名。

我使用默认设计视图进行登录/注册。我超越了两个控制器: 确认,允许根据in Devise's FAQ解释的可确认电子邮件设置密码,它就像一个魅力。

我还覆盖了注册控制器,为强参数配置了允许的参数,如in Devise FAQ所述,这也像魅力一样。

以下是我的路线:

  as :user do
    patch '/users/confirmation' => 'confirmations#update', :via => :patch, :as => :update_user_confirmation
  end
  devise_for :users, controllers: { :confirmations => 'confirmations', :registrations => 'registrations' }

这是我的User资源:

class User
  include Mongoid::Document
  devise :database_authenticatable, :registerable,
         :recoverable, :trackable, :validatable,
         :confirmable, :lockable, :timeoutable

  #required fields
end

因此,在创建用户时,会发送确认邮件,显示确认页面,用户可以设置其密码(确实写入数据库(从控制台检查)),然后登录并正确重定向。

现在,如果我将用户注销并尝试登录,我将始终面对错误Invalid email or password并重定向回sign_in页面。

我试着追踪问题所在,而我能找到的就是那条线 self.password = auth_values[:password]策略authenticatable#with_authentication_hash从未被点击过(即使auth_values[:password]携带正确的密码)。

我不知道该行会出现什么问题。任何线索都非常受欢迎。

========================= EDITED ===================== ====

以下是注册控制器:

class RegistrationsController < Devise::RegistrationsController

  #https://github.com/plataformatec/devise/tree/v3.0.0.rc#strong-parameters
  before_filter :configure_permitted_parameters

  layout 'public'

  private

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up){ |params| params.permit(:first_name, :email) }
  end

end

2 个答案:

答案 0 :(得分:0)

为什么要覆盖注册控制器?您可以在应用程序控制器本身中配置允许的参数(如您所指出的文档中所述)。我做到了,它工作得很好。我建议你应该删除控制器注册的路由,并使用应用程序控制器允许额外的参数。

答案 1 :(得分:0)

好的,我找到了答案,我团队中的某个人粗暴地对SessionsController#new.html.erb视图进行了更改。

而不是

<%= f.email_field :email, autofocus: true %></div>

代码是

<%= f.email_field :email, autofocus: true, :name => 'email' %></div>

导致电子邮件字段从用户哈希中删除。由于似乎没有人要求(:电子邮件),Devise实际上抱怨因为电子邮件丢失了。

感谢BallsOfSteel的输入,你把我放在赛道上了!