【发布时间】:2016-04-29 11:55:42
【问题描述】:
我正在使用 Devise 和 Rails 4。
我正在使用登录屏幕。在登录屏幕中,我正在传递用户名/电子邮件和密码,但我必须检查字段用户名或电子邮件中的任何一个是否与系统中的任何用户匹配。
尝试了以下条件以查找具有用户名或电子邮件的用户,但设计有效密码方法会引发错误。
条件:
user = User.where(["username = :value OR email = :value", { :value => username.downcase }])
在此之后,我正在检查用户密码,如 user.valid_password?(password)
错误: NoMethodError(未定义方法 `valid_password?' for #)
对于以下条件valid_password?会正常工作
user = User.find_by(email: email.downcase)
但我必须在::find_by 方法中检查用户名和密码,如下所示
user = User.find_by("email= email.downcase OR username= email.downcase")
有什么方法可以完成上面的事情吗?
【问题讨论】:
-
如果您使用的是设计,为什么要手动搜索用户?它为你做到了。如果您想验证设计本身是否正常工作,gem 会附带您可以运行的自己的测试。
-
你可以使用
before_action :authenticate_user!你不需要手动检查 -
您需要将
User.find_by("email= email.downcase OR username= email.downcase")重写为rails 方式吗? -
设计使用 before_action :authenticate_user! 处理它。但是我们如何手动检查API中的数据来自iOS APP呢?
标签: ruby-on-rails devise