17

我想为用户注册添加一个邀请码要求。IE。除了要求他们指定电子邮件/密码组合之外,我还想要一个附加字段:invite_code。这是一个临时修复,以便不需要的用户在给定的 Alpha 期间无法登录。

我很困惑,因为 Devise 没有添加控制器。我对虚拟属性的概念有点熟悉,让我印象深刻的是,我可以在模型中添加一个 :invite_code,然后现在只需硬编码一个步骤,它说邀请码现在必须等于 12345 或其他任何值。

这对设计身份验证有意义吗?我该如何从适当的 Rails 宁静的方法中解决这个问题?

非常感谢你。

4

3 回答 3

24

1) 一个虚拟属性通常需要一个 setter 和一个 getter。

最简单的方法是添加

attr_accessor :invite_code
attr_accessible :invite_code # allow invite_code to be set via mass-assignment
    # See comment by James, below.

到用户模型

2) 我假设 Devise 希望用户模型进行验证。所以你可以通过添加来停止验证

validates_each :invite_code, :on => :create do |record, attr, value|
    record.errors.add attr, "Please enter correct invite code" unless
      value && value == "12345"
end

注意:添加 :on => :create 因为仅在创建新用户时需要邀请代码,而不是在更新时。

于 2010-09-14T00:57:57.010 回答
9

试试这个:http: //github.com/scambra/devise_invitable

它增加了对 设计通过电子邮件发送邀请的支持(它需要经过身份验证)并接受设置密码的邀请。

它适用于 Devise >= 4.0 如果要使用 devise 3.0.x,则必须使用 1.2.1 或更低版本 如果要使用 devise 3.1.x,则必须使用 1.3.2 或更低版本 如果要使用 devise > = 3.2,您必须使用 1.6.1 或更低版本...

于 2010-09-14T11:33:47.393 回答
0

根据文档,invitable 让您可以控制谁可以邀请其他人。如果 的设置为“0”,则人们无法分发邀请invitation_limit

从文档:

邀请限制:用户可以发送的邀请数量。默认值 nil 表示用户可以发送任意数量的邀请,对任何用户没有限制,不使用invitation_limit 列。设置为 0 表示他们无法发送邀请。设置 n > 0 意味着他们可以发送 n 个邀请。您可以更改某些用户的邀请限制列,以便他们可以发送更多或更少的邀请,即使全局邀请限制 = 0。

于 2017-09-07T15:47:28.083 回答