gpt4 book ai didi

ruby-on-rails - 生成唯一的用户名(omniauth + devise)

转载 作者:行者123 更新时间:2023-12-03 18:26:54 28 4
gpt4 key购买 nike

我有一个使用 devise + omniauth 进行用户身份验证的应用程序。

在我的模型中,我的应用程序中的用户名是 唯一 .我不想在我的应用中出现重复的用户名。

facebook 中的一些用户在他的个人资料中没有定义的用户名。

如果用户没有在 facebook 中定义用户名,我想生成一个唯一的用户名。

例如生成密码我有这个:

:password => Devise.friendly_token[0,20]

如果 facebook 用户在 facebook 中没有用户名,我如何为我的应用程序生成一个唯一的用户名?

谢谢

最佳答案

您可以创建一个很好的可读用户名(例如从电子邮件的第一部分生成),然后通过添加数字来确保它是唯一的,直到它是唯一的。例如

#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

这里的一个问题是,有人可能会在您获取登录名和保存登录名之间打包。所以,也许最好将它组合成一个 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

关于ruby-on-rails - 生成唯一的用户名(omniauth + devise),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9905418/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com