amp*_*108 0 ruby-on-rails devise
我正在使用Devisegem执行基本身份验证。在中application_controller.rb,我具有以下内容before_action:
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :password])
devise_parameter_sanitizer.permit(:sign_in, keys: [:name, :password])
devise_parameter_sanitizer.permit(:account_update, keys: [:name, :password])
end
Run Code Online (Sandbox Code Playgroud)
当我尝试使用简单的名称/密码形式登录时,出现错误:“无效的电子邮件或密码”。我知道用户名和密码正确。电子邮件甚至都不是要发送的参数:
Started POST "/users/sign_in" for 127.0.0.1 at 2019-03-12 02:47:06 -0700
Processing by Devise::SessionsController#create as HTML
Parameters: {"utf8"=>"?", "authenticity_token"=>"ltvCys0g2WE8JWRaoQOYbt6LLe9mtJGCQ0hAoCiLCVsXAvfLuTpm02jrJnLjKk4AARSO1B9YLe3QyTTBs1d8iw==", "user"=>{"name"=>"my_name", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
Completed 401 Unauthorized in 3ms (ActiveRecord: 0.0ms)
Run Code Online (Sandbox Code Playgroud)
这里是user.rb:
class User < ApplicationRecord
devise :rememberable, :trackable, :lockable,
:database_authenticatable, :timeoutable,
:recoverable
validates :name,
:presence => true,
:uniqueness => {
:case_sensitive => false
}
def self.find_for_database_authentication(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where(conditions.to_hash)
.where(["name = :value OR email = :value",
{ :value => login.downcase }]).first
elsif conditions.has_key?(:name) || conditions.has_key?(:email)
where(conditions.to_h).first
end
end
def password_required?
true
end
end
Run Code Online (Sandbox Code Playgroud)
这是用户,如控制台所见(略有删节):
pry(main)> ap me
#<User:0x000056172bdd0e80> {
:id => 1,
:name => "my_name",
:email => "my_name@example.com",
:phone => "520 555 1212",
:initials => "amp",
:role => "admin",
:active => true,
:created_at => Fri, 08 Mar 2019 00:12:33 UTC +00:00,
:updated_at => Mon, 11 Mar 2019 17:17:11 UTC +00:00,
:current_prop_id => 1,
:encrypted_password => "$2a$11$2s/n.eaBCF731fTor3hW2OsD9kLXQkJnjKLoFN/27vYku/1GbvzW2",
:reset_password_token => nil,
:reset_password_sent_at => nil,
:remember_created_at => nil
}
Run Code Online (Sandbox Code Playgroud)
为什么我无法登录?
默认情况下,Devise使用电子邮件进行登录。我看到您已经使用名称进行注册和登录。为了使用其他任何参数进行登录,需要修改配置。
在config / initializers / devise.rb文件中,设置config.authentication_keys = [:用户名]
有关更多详细信息,请参考以下内容: 使用电子邮件以外的其他方式登录
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |