如何在Ruby on Rails上设置用户名验证?

eng

我是Rails的新手,我建立了一个图书共享平台,并且想从电子邮件名称中设置用户名。并验证用户名必须至少5个字符,最多50个字符。我进行了设置,但验证不起作用。错误出现在屏幕上,但用户仍然可以注册。我使用Devise for User模型以及Devise Wiki。

user.rb

class User < ApplicationRecord
  before_create :set_username

  validates :email, presence: true

  has_many :books

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  attr_accessor :login

  def login
    @login || self.username || self.email
  end

  private
  def set_username
    self.username = self.email.split('@').first 

    validates_length_of :username, 
    :minimum => 5, :maximum => 50, 
    presence: true,
    uniqueness: true
  end

  def self.find_for_database_authentication(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

  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
      if conditions[:username].nil?
        where(conditions).first
      else
        where(username: conditions[:username]).first
      end
    end
  end
end

routes.rb

Rails.application.routes.draw do
  devise_for :users, :path_prefix => 'd'
  resources :dashboard
  resources :books do
    resources :comments
  end
  resources :users
  match '/users/:id', to: 'users#show', via: 'get'
  root 'welcome#index'
  get 'dashboard/index'
  get 'users/index'
end

devise / registiration / new.html.erb

<h2>Sign up</h2>

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <%= render "devise/shared/error_messages", resource: resource %>

  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true, autocomplete: "email" %>
  </div>

  <div class="field">
    <%= f.label :password %>
    <% if @minimum_password_length %>
    <em>(<%= @minimum_password_length %> characters minimum)</em>
    <% end %><br />
    <%= f.password_field :password, autocomplete: "new-password" %>
  </div>

  <div class="field">
    <%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation, autocomplete: "new-password" %>
  </div>

  <div class="actions">
    <%= f.submit "Sign up" %>
  </div>
<% end %>

<%= render "devise/shared/links" %>
伊什马洛夫

您可以通过将以下内容添加到来将电子邮件地址的第一部分用作用户名user.rb

  def username
    email.split(/@/).first
  end

这样,对于用户来说,[email protected]当您打电话user.username收到电子邮件时,current_user.username您会得到alex

您不需要username在数据库中添加列,也不需要在数据库中添加验证。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Hashicorp Vault设置用户名/密码验证

如何在Moya中设置基本身份验证用户名和密码?

如何注入的用户名(未验证)?

Watson Speech to Text:如何在 Windows 10 上设置我的用户名和密码

如何在 Ruby on Rails 中将用户名添加到预订中

Ruby on Rails:用户名/密码错误?(535身份验证失败)

如何在Grav中禁用用户名验证?

如何在Java的教科书字段中验证用户名?

如何在 Django 中覆盖用户名验证

如何在PHP中验证用户名

如何设置用户名/密码mosquitto?

如何使用Java代码设置基本身份验证(用户名和密码)

如何为基本的HTTP身份验证设置用户名和密码?

如何使用Python / Selenium设置代理身份验证用户名:密码

如何在dockerfile中设置mysql用户名

如何以编程方式在macOS上验证用户名和密码?

如何使用 Java 正则表达式在 Android 上验证用户名和密码?

Ruby on Rails - 在新页面/控制器上显示用户名

如何在Windows 10上检查PostgreSQL的用户名

如何在Cygwin上更改用户名

如何在Zeppelin-Keycloak上显示用户名

如何在 Expressjs 上捕获错误的用户名或密码?

如何在母版页上创建用户名

如何在 macOS 上更改终端用户名

使用Ruby on Rails Devise Gem向用户名注册

如何使用matches(regex)验证用户名?

如何使用joi验证用户名是否唯一?

如何验证非法字符用户名jQuery

React native如何验证用户名和密码