Devise:允许用户注册为“UsErNaMe”但使用“用户名”登录

2024-06-19

与大多数网站的工作方式相同,我将“UsErNaMe”存储在数据库中,但让用户使用“用户名”登录。

这是一个相当明显且必要的功能,很多人似乎都问过它,但我不断遇到的解决方案似乎与 Devise 自己的文档脱节。

例如,考虑这篇博文:http://anti-pattern.com/2011/5/16/case-insensitive-keys-with-devise http://anti-pattern.com/2011/5/16/case-insensitive-keys-with-devise

[...]您可能遇到过一些用户喜欢输入的问题 登录信息(电子邮件和/或用户名)中的某些字母为大写, 但希望他们尝试登录时不区分大小写。 无理要求[...]

凉爽的!这就是我想要的。

他的解决方案:

# config/initializers/devise.rb
Devise.setup do |config|
  config.case_insensitive_keys = [:email, :username]
end

这就是我不断寻找的解决方案。但这里是该配置选项的文档:

# Configure which authentication keys should be case-insensitive.
# These keys will be downcased upon creating or modifying a user and when used
# to authenticate or find a user. Default is :email.
config.case_insensitive_keys = [ :username, :email ]

特别是:“这些键将在创建/修改用户时小写。”换句话说,用户名在数据库中被小写。

核实:

User.create username: "UsErNaMe", password: "secret", email: "[email protected] /cdn-cgi/l/email-protection"
#=> <User username="username"...>

我是否遗漏了一些非常明显的事情?


From 设计维基 https://github.com/plataformatec/devise/wiki/How-To%3a-Allow-users-to-sign-in-using-their-username-or-email-address:你需要覆盖设备的find_first_by_auth_conditions模型中的方法。

活动记录示例:

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

您可以删除OR lower(email) = :value如果您也不需要通过电子邮件进行身份验证,则部分。

这样你就不需要列出username in case_insensitive_keys并且它在数据库中不会被小写。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Devise:允许用户注册为“UsErNaMe”但使用“用户名”登录 的相关文章

  • Rails 4、omniauth-facebook、rack-cors、Heroku 的 CORS 问题

    Summary 我有 CORS 问题 我正在尝试使用 Rails API 从 React 应用程序向 Facebook 进行身份验证 我的应用程序在 localhost 8080 上运行 我的 api 在 Heroku 上运行 我可以登录
  • Rails ActiveRecord 按日期将结果分组到子集合中

    我正在尝试在 Rails 3 1 中执行 ActiveRecord 查询 其中我将结果排序到分组项目的子集合中 在本例中按日期分组 我认为我的代码可以最好地解释它 这是我的方法 它有效 但发出 4 个查询才能完成工作 这样做似乎效率不太高
  • 过滤器链因 [:login_required] returned_or_redirected 而停止

    希望我能很好地解释这一点 但如果需要更多信息 请告诉我 我正在构建一个表单 用户可以在其中创建 事件 此次事件有如下关系 属于 客户 客户有很多事件 belongs to 用户 用户有很多事件 has one incident status
  • 如何测试 before_filter 是否与 Rails 中的 RSpec 一起正常工作

    我有一个check user access control我的 ApplicationController 中的 before filter 在允许登录用户通过之前检查其角色和权限 我正在尝试对其进行一些测试 但找不到好的方法 对于简单的索
  • 设计闪现消息不显示

    Devise 在我的应用程序中完美运行 除了来自 devise en yml 的闪存消息未显示在视图中 我究竟做错了什么 下面是我的注册页面视图 我都尝试过 alert and notice但不工作 先感谢您 h2 Sign up h2 p
  • Rails 3 ActiveModel:无法直接包含 ActiveModel::Model

    在我的 Rails 3 2 11 和 开发 环境中 当我尝试拥有活动模型时 class DisponibilityApi include ActiveModel Model attr accessor start time end time
  • 安装 sqlite3 公共密钥环时出错,未找到

    怎么了 我该如何安装它 PS C Users luism gt gem install sqlite3 暂时增强 MSYS MINGW 的 PATH 安装所需的 msys2 软件包 mingw w64 x86 64 sqlite3 警告 未
  • 来自插件的 Rails 3 控制器

    我正在创建一个 Rails 3 插件 我想在其中集成控制器 rails 将自动将其视为 app controllers 文件夹中的 普通 控制器 我该如何做到这一点 或者从插件获得自定义控制器的最佳解决方案是什么 我找到了文档指南 ruby
  • Rails 如何确定传入请求格式?

    我只是想知道 Rails 如何知道请求的格式以正确输入著名的 respond to do format format html format xml format json end 作为一个例子 考虑一下我遇到的这种情况 假设通过 java
  • 使用rails-Ajax 调用控制器方法?

    我正在尝试从视图中的按钮执行 application controller rb 中的 Ruby 方法 在昨天的一篇文章中 有人告诉我使用 Ajax 调用来执行此操作 因为如果没有它 只会在页面加载时运行 我对此很陌生 很难理解它 我安装了
  • Friendly_id 和真实ID

    有什么办法可以得到真正的id使用Friendly id 修改的模型中的列 出于性能原因 我不想对其进行另一个数据库查询 广义上来说Friendly id修改to param and find方法 接下来应该可以工作 affiche Affi
  • 如何在Rails中显示URL指向的图像

    我这里有一张图片http power itp ac cn jmyang funny fun4 jpg http power itp ac cn jmyang funny fun4 jpg我想在我的 Rails 站点中显示它 我该怎么做 您还
  • RSpec:重新打开类时存根 Rails.application.config 值不起作用?

    我在应用程序配置中定义了一个选项 我想要测试的类是在 gem 中定义的 不是我编写的 我想重新开课 Myclass class eval do if Rails application config myoption value1 some
  • 将对象数组转换为 ActiveRecord::Relation

    我有一个对象数组 我们称其为Indicator 我想运行 Indicator 类方法 def self subjects该数组上的种类 范围等 我知道在一组对象上运行类方法的唯一方法是让它们成为 ActiveRecord Relation
  • before_filter set_locale 除了控制器

    My routes rb MyApp Application routes draw do scope locale do all resources here end namespace blog do resources posts o
  • 尝试安装 Rails 时,执行 gem ... (Gem::RemoteFetcher::FetchError) 503 错误

    这是当我尝试使用 Ruby 2 1 1 和 RVM 执行 gem install Rails v 4 1 0 时出现的错误 错误 执行 gem 时 Gem RemoteFetcher FetchError 错误 响应服务不可用 503 ht
  • 将 mongoid 会话设置为只读

    我有不同的会话mongoid yml 其中一个会话提供来自静态 mongo 数据库的数据 我想知道是否有可能以只读模式 加载 会话 以便不进行任何更改save create destroy or destroy all可以制作 我的mong
  • 如何摆脱 Devise 上的电子邮件正则表达式消息?

    我在用着设计令牌认证 https github com lynndylanhurley devise token authgem 每次我在 Rails 4 2 5 应用程序中运行测试套件时 我都会收到来自 Devise 的弃用警告 弃用警告
  • 使用 Figaro 和 Secrets.yml 管理环境变量

    我有一个 Rails 4 1 应用程序 我正在尝试组织我的环境变量 截至目前 我的 config 文件夹中有一个 Secrets yml 文件 我还安装了费加罗宝石 我的目标是将所有环境变量放在 application yml 未签入 gi
  • 如何向 ActiveRecord 集合添加方法?

    我想为特定模型的所有集合添加一个方法 假设我想添加方法my complicated averaging method到 WeatherData 集合 WeatherData all limit 3 my complicated averag

随机推荐