我正在关注Rails教程,在注册我的网站后,我正在尝试登录。我最近在我的应用程序中注意到,如果我将我的电子邮件地址大写,我会收到无效的用户名/密码消息。我在Rubular上测试了正则表达式,它适用于大写,因此不可能。
也许这涉及会话?
email_regex = /\A[\w+\-.]+@[csupomona\d\-.]+[edu]+\z/i
validates :email, :presence => true,
:format => { :with => email_regex },
:uniqueness => { :case_sensitive => false }
这是sessions / create
的代码def create
user = User.authenticate(params[:session][:email],
params[:session][:password])
if user.nil?
flash.now[:error] = "Invalid email/password combination."
@title = "Sign in"
render 'new'
else
sign_in user
redirect_to root_path
end
end
答案 0 :(得分:5)
你对这个正则表达式的含义有点困惑。我们来看看这个:
validates :email, :presence => true,
:format => { :with => email_regex },
:uniqueness => { :case_sensitive => false }
正在使用的正则表达式在哪里?它被用于:format
,因此正则表达式仅用于查看传入的电子邮件地址是否与有效的电子邮件地址相似,而且与唯一性无关。 :uniqueness
validates
参数指定在确保电子邮件地址唯一时不应考虑这种情况。因此,您不能让两个用户的电子邮件地址仅因大小写而异。
您所展示的代码中没有任何内容可以说明当您尝试与某人签约时如何比较电子邮件地址,以及您遇到麻烦的地方。您必须更新User.authenticate
类方法,以便对电子邮件地址进行不区分大小写的搜索。
答案 1 :(得分:5)
这与验证无关。 这与
有关User.authenticate
的工作原理(我假设它有一个User.find_by_email)看看这个问题,我从来没有真正想过这个问题。
但要解决这个问题,有几种方法可以解决这个问题。
User.authenticate
执行相同的操作User.authenticate
不区分大小写。但我感觉User.authenticate
来自Devise
或类似的东西。所以1.可能是最好的解决方案
class User
# all email writes get lowercased
def email=(value)
self[:email] = value && value.downcase
end
end
user = User.authenticate(params[:session][:email].try(:downcase), ...)