[英]Devise invalid email or password with valid information
這是設置:
~/.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的可怕錯誤,除非經過確認,否則它永遠不接受在用戶中簽名。
我使用默認的devise視圖進行登錄/注冊。 我覆蓋了兩個控制器:確認,以允許按照Devise常見問題解答中的說明從可確認的電子郵件中設置密碼,並且它的作用就像一個超級按鈕。
我還改寫了注冊控制器,以按照Devise常見問題解答中的說明為強參數配置允許的參數,這也很吸引人。
這是我的路線:
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頁面。
我嘗試跟蹤問題出在哪里,我所能找到的是,從未命中authenticatable#with_authentication_hash
策略的self.password = auth_values[:password]
以外的行(即使auth_values[:password]
攜帶正確的密碼)也沒有被發現。
我不知道那條線會出什么毛病。 任何線索都值得歡迎。
=========================編輯======================= =
這是注冊控制器:
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
你為什么要覆蓋注冊控制器? 您可以在應用程序控制器本身中配置允許的參數(如您所指向的文檔中所述)。 我已經做到了,而且效果很好。 我建議您應該刪除到控制器注冊的路由,並使用應用程序控制器允許額外的參數。
好的,我找到了答案,我的團隊中的某個人殘酷地對SessionsController#new.html.erb視圖進行了更改。
代替
<%= f.email_field :email, autofocus: true %></div>
代碼原為
<%= f.email_field :email, autofocus: true, :name => 'email' %></div>
這導致電子郵件字段從用戶哈希中刪除。 似乎沒有人要求(:email),Devise實際上抱怨是因為缺少電子郵件。
謝謝BallsOfSteel的投入,您讓我走上了正軌!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.