ruby-on-rails - Rails 4 + 设计使用电子邮件或用户名和强参数登录

标签 ruby-on-rails devise ruby-on-rails-4 strong-parameters

我是 RoR 的新手,并被这个设计问题所困扰。
我想允许用户使用电子邮件或用户名登录(使用用户名注册已经可以了)。

我关注了这些文章:
Article 1Article 2你可以看到下面的结果:

应用 Controller .rb

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password) }
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :password, :remember_me) }
  end
end

用户名
class User < ActiveRecord::Base
    devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :authentication_keys => [:login]

  validates_uniqueness_of :username
  validates_presence_of :username
  validates :username, length: { in: 4..20 }

  def self.find_first_by_auth_conditions(warden_conditions)
    conditions = warden_conditions.dup
    if login = conditions.delete(:login)
      where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first
    else
      where(conditions).first
    end
  end      
end

新的.html.erb
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
  <div><%= f.label :login, "Pseudo ou email" %><br />
  <%= f.text_field :login, :autofocus => true %></div>
...

设计文件

...
config.authentication_keys = [:登录]
...

结果
Showing /home/action/workspace/rchq/app/views/devise/sessions/new.html.erb where line #5 raised:

undefined method `login' for #<User:0x000000033996a0>

我不明白为什么它不起作用,因为我指定了“sign_in” permit :login for User。

最佳答案

问题在于“登录”字段,删除 :authentication_keys => [:login]并添加attr_accessor :login在您的 User模型。

关于ruby-on-rails - Rails 4 + 设计使用电子邮件或用户名和强参数登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18026594/

相关文章:

ruby-on-rails - Rails session 存储模型对象

ruby-on-rails - rails : dynamic columns/attributes on models?

ruby-on-rails - 是否有任何易于配置的带有适用于 Windows 的 ruby​​ 的网络服务器?

javascript - 选择要加载的 javascript/jquery 库

ruby-on-rails - 如何使用 RestClient 在 post 请求中发送数据

ruby-on-rails - 设计可重新确认不发送

javascript - 使用Rails检测 View 中是否启用了javascript

javascript - 如何保持全局当前用户直到使用 angular_devise 注销?

ssl - 在登台服务器上将 Devise 与 SSL 结合使用时,如何修复重定向循环?

ruby-on-rails-4 - Rails 与表单 collection_select 的多态关联,无需嵌套