devise - 使用带有 Rails 4 的设计使用用户名登录

标签 devise ruby-on-rails-4

我正在使用 Rails 4.0 和 Devise 3.0.0.rc。

我使用默认设置安装了 Devise - 即使用您的电子邮件地址注册/登录。但是,我希望用户能够使用用户名而不是电子邮件地址进行注册。我遵循了 Railscasts 中要更改的参数,以及我可以在此处找到的有关 Rails 4 可能需要更改的内容的任何建议。但是,每当我尝试创建新用户时,我都会收到错误消息“电子邮件不能为空”。有没有人知道是什么导致了这种情况,我该如何解决?谢谢!!

代码:

应用 Controller :

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  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, :password, :password_confirmation) }
      devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:username, :password, :remember_me) }
    end
end

登录(注册表单几乎相同):
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
  <div><%= f.label :username %><br />
  <%= f.text_field :username, :autofocus => true %></div>

在 devise.rb 配置中:
config.authentication_keys = [ :username ]

用户 Controller :
private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end

# Never trust parameters from the scary internet, only allow the white list through.
def user_params
  params.require(:user).permit(:first_name, :middle_names, :last_name, :date_of_birth, :gender, :line_1, :line_2, :line_3, :town, :county, :postcode, :contact_number, :email, :username, :password, :password_confirmation, :remember_me)
end

用户.rb:
protected

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

最佳答案

删除 validatable来自 User型号 devise部分 - 此选项验证电子邮件地址的存在、唯一性和格式。不过,您必须手动添加自己的密码存在、确认和长度验证。

关于devise - 使用带有 Rails 4 的设计使用用户名登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17992847/

相关文章:

javascript - CK 编辑器支持 Rails 4 中的数学公式

ruby-on-rails - rails API : Best way to implement authentication?

Rails 中带有 Turbolinks 的 Javascript 条件?

ruby-on-rails-3 - Authlogic 和/或 Devise in Rails 背后的安全性如何?

ruby-on-rails - rails + 设计 : Update user with or without pasword

ruby-on-rails - 使用 Rails(和设计)验证 Ember 应用程序

ruby-on-rails - session [:user_return_to] getting nil in redirecting back to current page after sign in

ruby-on-rails - 从多个 Controller 继承。

ruby - 我如何使用 Rails 4 在 rake 进程中运行 'cmd' 命令

ruby-on-rails - Bundle Install on dev 给出了缺少生产 gem 的错误