hyp*_*jas 4 ruby-on-rails devise omniauth ruby-on-rails-3
我有一个带有devise + omniauth用户身份验证的应用程序.
在我的模型中,我的应用中的用户名是唯一的.我不想在我的应用程序中重复用户名.
Facebook中的某些用户在其个人资料中没有定义的用户名.
如果用户没有在facebook中定义用户名,我想生成一个唯一的用户名.
例如,为了生成密码我有这个:
:password => Devise.friendly_token[0,20]
Run Code Online (Sandbox Code Playgroud)
如果Facebook用户在Facebook中没有用户名,我如何为我的应用生成唯一的用户名?
谢谢
Max*_*ams 11
您可以创建一个很好的可读用户名(例如从电子邮件的第一部分生成),然后通过添加数字确保它是唯一的.例如
#in User
def get_unique_login
login_part = self.email.split("@").first
new_login = login_part.dup
num = 2
while(User.find_by_login(new_login).count > 0)
new_login = "#{login_part}#{num}"
num += 1
end
new_login
end
Run Code Online (Sandbox Code Playgroud)
这里的一个问题是,有人可能会在你获得它并保存它之间进行登录.所以,也许最好把它组合成一个before_create过滤器:
#in User
before_create :ensure_login_uniqueness
def ensure_login_uniqueness
if self.login.blank? || User.find_by_login(self.login).count > 0
login_part = self.email.split("@").first
new_login = login_part.dup
num = 2
while(User.find_by_login(new_login).count > 0)
new_login = "#{login_part}#{num}"
num += 1
end
self.login = new_login
end
end
Run Code Online (Sandbox Code Playgroud)
您可以在 @ 符号之前获取电子邮件的一部分,然后添加诸如 user_id 之类的内容,或者只获取电子邮件本身。或者您可以以某种方式组合 Facebook 响应中的名字和姓氏。
| 归档时间: |
|
| 查看次数: |
3485 次 |
| 最近记录: |