乐者为王

Do one thing, and do it well.

restful_authentication实现用email登录

如果要使用用户名和email并行的登录方式,那么只要在models/user.rb中添加一行代码就可以了:

1
2
3
4
5
6
def self.authenticate(login, password)
  return nil if login.blank? || password.blank?
  u = find_by_login(login.downcase)  # need to get the salt
  u ||= find_by_email(login.downcase)  # 有了这行代码就可以使用email登录了
  u && u.authenticated?(password) ? u : nil
end

假如要使只能用email登录,就要先移除models/user.rb中的下列代码:

1
2
3
validates_presence_of :login
validates_length_of :login
validates_uniqueness_of :login

然后修改self.authenticate方法为:

1
2
3
4
5
def self.authenticate(email, password)
  return nil if email.blank? || password.blank?
  u = find_by_email(email.downcase)  # need to get the salt
  u && u.authenticated?(password) ? u : nil
end

接着将注册页面views/users/new.html.erb中的login块移除,还有就是要将相关邮件模板中的@user.login改为@user.email。

经过这些修改后就实现了只能使用email登录的功能。

Comments