【问题标题】:Devise. Create username automatically based on his email设计。根据他的电子邮件自动创建用户名
【发布时间】:2017-06-02 15:24:10
【问题描述】:

是否可以使用 devise 自动根据他的电子邮件创建用户名?

在注册页面上,我只有电子邮件和密码字段。

例如,当用户使用电子邮件randomname@gmail.com 创建新帐户时, 我希望他的用户名自动变为randomname。我怎样才能完成它?

【问题讨论】:

  • 你打算对randomname@gmail.com、randomname@yahoo.com和randomname@random.com做什么?
  • 我认为对于受众较少的网站来说这是相当罕见的情况,而且用户可以在注册后更改他们的用户名。无论如何,最好做好准备,所以我想我会使用回调为已经使用的用户名添加一些前缀,例如 randomname2/3/etc。

标签: ruby-on-rails ruby-on-rails-3 devise


【解决方案1】:

您可以使用^[^@]+ 之类的正则表达式获取电子邮件地址的第一部分,这将返回从@ 符号之前的字符串开头的所有内容。

^ /* start of string or line */
[^@] /* character class capturing everything except @ */
+ /* match must happen atleast one time */

要将用户名添加到您的数据库,您可以使用callback

class User < ActiveRecord::Base
  before_create :set_username

  private
    def set_username
      self.username = self.email[/^[^@]+/]
    end
end

【讨论】:

  • 如果有人我们有hoobas@gmail.com 和hoobas@yahoo.com 我该如何解决这个冲突?
【解决方案2】:

要考虑名称相同但网址不同的电子邮件,您可以在末尾添加一个随机数。

self.username = "#{self.email[/^[^@]+/]}-#{SecureRandom.hex(1)}"

这会将hoobas-1fhoobas-3c 返回到上面评论中的两封电子邮件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多