以下是设置:
~/.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
答案 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的输入,你把我放在赛道上了!