我正在使用Rails 4和Devise 3.0.0,并且很擅长使用这些新的强大参数。我使用documentation on the Devise wiki为用户模型添加了用户名。我遇到的问题是Rails 4中的强参数变化。
如何将:login
属性添加到用户模型以启用使用用户名或电子邮件登录?
答案 0 :(得分:10)
来自设备上的rails4自述文件:https://github.com/plataformatec/devise/tree/rails4#strong-parameters
class ApplicationController < ActionController::Base
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :email) }
end
end
答案 1 :(得分:2)
@ justin.chmura
以下是我们最终如何使其发挥作用的要点 https://gist.github.com/AJ-Acevedo/6077336
要点包含:
应用程序/控制器/ application_controller.rb
应用程序/模型/ user.rb
config / initializers / devise.rb
答案 2 :(得分:2)
您应该确保包含
attr_accessor :login
在用户模型中。我在这里找到了解释attr_accessible已被弃用的问题。
Rails 4 + Devise Login with email or username and strong parameters
Difference between attr_accessor and attr_accessible
这是我的 app / models / user.rb 文件的样子。
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessor :login
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where(conditions).where(["username = :value OR lower(email) = lower(:value)", { :value => login }]).first
else
where(conditions).first
end
end
validates :username,
:uniqueness => {
:case_sensitive => false
}
end
答案 3 :(得分:0)
如果你在config/initializers
中添加一个模块,如下所示,那么它将正常工作
文件config/initializers/devise_permitted_parameters.rb
,内容如下:
module DevisePermittedParameters
extend ActiveSupport::Concern
included do
before_filter :configure_permitted_parameters
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation) }
end
end
DeviseController.send :include, DevisePermittedParameters