让用户使用邮箱地址或用户名登录的最佳方式是什么?我正在使用warden+Desive进行身份验证.我想这样做可能不会太难,但我想我需要一些建议,把所有需要的东西放在哪里.也许Desive已经提供了这个功能?比如在config/initializer/design中.你会写:

config.authentication_keys = [ :email, :username ]

需要用户名和邮箱才能登录.但我真的希望用户名和邮箱都只有一个字段,并且只需要其中一个字段.我只是想象一下,使用一些ASCII艺术,它在视图中应该是这样的:

Username or Email:
[____________________]

Password:
[____________________]

[Sign In]

推荐答案

我已经找到了解决这个问题的办法.我对它不太满意(我希望有一种方法在初始值设定项中指定),但它现在可以工作.在用户模型中,我添加了以下方法:

def self.find_for_database_authentication(conditions={})
  find_by(username: conditions[:email]) || find_by(email: conditions[:email])
end

正如@sguha和@Chetan所指出的,another great resource is available on the official devise wiki.

Ruby-on-rails相关问答推荐

发送不调用类或模块中的私有方法

Ruby on rails 查询不知道怎么写

Ruby Sinatra Web 服务在 localhost:4567 上运行,但不在 IP 上

如何在我的 rails 应用程序中测试 ActiveRecord::RecordNotFound?

FactoryGirl 和 Rspec 测试中 attributes_for 的含义

RSpec > 有没有办法用一个命令运行所有测试?

Rails - 生产模式下的错误

Rails 4 查找没有子元素的父母

在 PostgreSQL 中强制字符串的最大长度

如何编写 Capybara 断言来判断按钮的存在及其启用或禁用状态?

设计记住我和会话

嵌套模型和父验证

我可以在 Ubuntu 上使用 apt-get 安装 gems 吗?

Ruby on Rails i18n - 想要在模型中翻译自定义消息

将 Rails 服务器绑定到 0.0.0.0 能给你带来什么?

Sidekiq 在 docker-compose 上的 127.0.0.1:6379 (Errno::ECONNREFUSED) 上连接到 Redis 时出错

向 Rails 模型添加外键

从 Rails 控制器获取主机名

没有路由匹配缺少必需的键:[:id]

如何获取 Rails 3.1 中assets资源 的绝对 URL?