Ruby on rails 设计自定义用户属性acessor

Ruby on rails 设计自定义用户属性acessor,ruby-on-rails,ruby,devise,omniauth,Ruby On Rails,Ruby,Devise,Omniauth,我是rails新手,我正在尝试自定义授权 我已经完成了一个定制的确认邮件视图app/views/designe/mailer/confirmation\u instructions.html.erb,如下所示: 欢迎光临 谢谢注册。您已通过注册。 账户数据已自动创建,如下所示: 用户名: 密码: 您可以通过以下链接确认您的帐户电子邮件: @resource.provider返回一个字符串,例如'facebook','twitter','github' 如果我想自定义这些字符串,让我们

我是rails新手,我正在尝试自定义授权

我已经完成了一个定制的确认邮件视图
app/views/designe/mailer/confirmation\u instructions.html.erb
,如下所示:

欢迎光临

谢谢注册。您已通过注册。 账户数据已自动创建,如下所示:

  • 用户名:
  • 密码:
您可以通过以下链接确认您的帐户电子邮件:

@resource.provider
返回一个字符串,例如
'facebook'
'twitter'
'github'

如果我想自定义这些字符串,让我们用print来代替
'Facebook'
'Twitter'
'GitHub'
,我应该怎么做?我的第一个想法是一种方法

def print_cool_provider(provider)
  if provider == 'facebook'
    return 'Facebook'
  else if ...
    ...
  end
end
<>我考虑了一个有限的可能提供者的简短列表,我可以一一处理。我真正的问题在于MVC、Rails和Desive:


我应该在哪里定义此方法以尊重MVC模式,同时能够从
确认\u instructions.html.erb
模板调用它?

您可以添加一个简单的帮助程序,如下所示:

# app/helpers/provider_helper.rb
module ProviderHelper

  # only special cases, where #titlecase won't suffice
  PROVIDER_NAMES = {
    'github'        => 'GitHub',
    'google_oauth2' => 'Google'
  }

  def provider_name(user)
    PROVIDER_NAMES[user.provider] || user.provider.titlecase
  end
end
不过,更好的方法是(或装饰者)

  • 这将是我的第一选择
  • Ruby工具箱列表


注意:除非密码经过加密,否则我不会通过电子邮件提交密码。

如果您只想打印一个可读的(大写首字母)字符串,您可以在确认说明中使用它:
您可以在这里查看更多信息:这是我的第一个想法,但是我想知道是否有更好的选项更尊重MVC模式,以防我以后想扩展它。我的想法是通过电子邮件将此密码发送给用户,这样他们就不必总是通过提供商登录。然而,我是新来的,我当然接受建议,因为我的想法可能并不总是正确的。你的意思是我应该加密整个电子邮件?或者,只发送由Desive生成的密码就足够了。无论如何,非常感谢,我可能会使用演示者。我建议根本不要发送密码。如果你加密邮件,你要么要求接收者使用PGP(虽然这不是一件坏事),要么传输解密密钥,无论如何,最好也不要未加密。。。另一方面,OAuth提供程序的全部目的是,您不必管理n个密码,而只需为提供程序管理一个密码,通过该密码,您的用户将识别自己。如果您坚持使用本地密码,请将其设置为可选,并让用户在首次登录后自行选择。好的,我明白您的意思,我可能不会使用本地密码。无论如何,演示者填补了涉及web应用程序其他部分的不足,所以Draper对我真的很有帮助。再次感谢!