1

我正在尝试在 Ruby on Rails 3 中编写一个基本的受邀者验证页面。

我正在尝试编写一个基本网站页面,该页面有一个文本字段供用户输入他们的电子邮件地址,然后 prograverify 是否已邀请该电子邮件地址。如果已被邀请,他们将被引导到注册页面。如果没有,他们将收到一些简单的“尚未被邀请”消息,并且不会被带去注册。

我很难弄清楚如何准确地将这些信息带回控制器并运行检查。

我目前的设置是:

用户从 Manager/WelcomePage Rails 打开 ManagerController 并转到 WelcomePage 操作;有一个 Invite 模型和表,其中有一个受邀者电子邮件列。在 WelcomePage 上,有一个表单可以输入用户的电子邮件地址,然后将其传递回 ManagerController 并查看用户的地址是否已被邀请。

<%= form_for(:invite, :url => {:action => 'authenticate'}) do |f| %>
    <div class="field">
        <p class="Invitee Verification">Enter your e-mail. If you've been invited, we'll take you to sign up</p>
        <%= f.text_field(:email) %>

        <div class="form-buttons">
            <%= submit_tag("enter") %>
        </div>
<% end %>

然后返回 ManagerController 代码:

def authenticate()
  invite_input_email = params[:email]
  if Invite.where(:email => invite_input_email).size > 0
    render('new_user_form')
  else
    render(:text => "nah")
  end
end

关于需要改变什么的任何想法?

4

3 回答 3

2

抱歉,我不知道 Ruby on Rails 语法,但从设计的角度来看,我认为您解决问题的方法不正确..

如果有人被邀请,那么他应该会收到一封带有注册 url 的电子邮件,其中包含为该电子邮件唯一生成并存储在您的数据库中的哈希。用户访问 url 并使用电子邮件注册的那一刻,您将禁用该哈希以进行进一步注册。您的方法的问题在于,如果黑客认识某个被邀请的人,他可以轻松地使用他的电子邮件并注册到您的网站。

您应该使注册尽可能直观,不要添加额外的页面。

您如何看待上述方法?

于 2011-07-31T06:22:20.290 回答
1
invite_input_email = params[:email]

我认为这是不正确的,因为form_for它将以类似数组的模式生成参数名称。

正确版本:

invite_input_email = params[:invite][:email]
于 2011-07-31T09:03:34.690 回答
0

我同意@user350374 并会在消息中添加说您可以向您的用户模型添加一些验证以检查邀请记录。

如果您还没有这样做,请检查 Devise gem 并让它工作,然后当您启动并运行它时添加您的验证。

于 2011-07-31T06:25:03.237 回答