Ruby on rails 如何创建只能通过随机生成的URL访问的视图?

Ruby on rails 如何创建只能通过随机生成的URL访问的视图?,ruby-on-rails,url,routing,registration,Ruby On Rails,Url,Routing,Registration,我想设置一个注册过程,在该过程中,用户最初从站点请求更多信息,然后收到一封包含实际注册页面链接的电子邮件。链接应该是一个随机生成的URL,对注册页面的访问应该受到其他限制。换句话说,注册页面不应该通过在浏览器中手动键入URL来访问 如果您能就如何最好地实现这些功能提供建议,我将不胜感激 我是Rails的新手,所以如果这个问题是基本的或者已经讨论过了,我会提前道歉 您需要将随机令牌存储在数据库中。由于您要将其发送到电子邮件地址,因此您可能还希望存储电子邮件,以便在用户注册时将其添加到您的用户模型中

我想设置一个注册过程,在该过程中,用户最初从站点请求更多信息,然后收到一封包含实际注册页面链接的电子邮件。链接应该是一个随机生成的URL,对注册页面的访问应该受到其他限制。换句话说,注册页面不应该通过在浏览器中手动键入URL来访问

如果您能就如何最好地实现这些功能提供建议,我将不胜感激


我是Rails的新手,所以如果这个问题是基本的或者已经讨论过了,我会提前道歉

您需要将随机令牌存储在数据库中。由于您要将其发送到电子邮件地址,因此您可能还希望存储电子邮件,以便在用户注册时将其添加到您的用户模型中。下面是一些你可以做的相关部分(尽管你需要填补空白)

基本上,您需要在控制器中生成带有
RegistrationToken.new(:email=>“他们的电子邮件地址”)
的注册令牌

此模型实现随机令牌的生成:

class RegistrationToken < ActiveRecord::Base
  # the secret is just to make the random number generator more secure
  @@secret = 6345
  def initialize
    # info at http://www.ruby-doc.org/core-1.9.3/Random.html
    seed = Random.new().integer(1000000000) + @@secret
    token = Random.new(seed).integer(1000000000);
    # you might want to generate random numbers larger than 1 billion
    # for more security (maybe with 64 bit integers?)
  end
end
然后您只需要设置控制器和视图

对于注册控制器,您只需要以下内容:

class RegistrationsController < ActiveRecord::Base
  def new
    @registration_token = RegistrationToken.find(params[:token]).first
    if @registration_token.nil?
      raise 'Invalid token' # or whatever you want, eg. redirect to a page
    end
    # otherwise render the registration form (can do implicit render)
  end
  def create
    @registration_token = RegistrationToken.find(params[:token]).first
    if @registration_token.nil?
      raise 'Invalid token' # or whatever you want, eg. redirect to a page
    end
    # otherwise create the user, eg.
    User.create(params[:user].merge(:email => @registration_token.email))
    @registration_token.destroy
  end
end
类注册控制器@registration_token.email))
@注册令牌
结束
结束

上面的控制器操作基本上确保它们只能在数据库中找到匹配的令牌时注册。

您需要将随机令牌存储在数据库中。由于您要将其发送到电子邮件地址,因此您可能还希望存储电子邮件,以便在用户注册时将其添加到您的用户模型中。下面是一些你可以做的相关部分(尽管你需要填补空白)

基本上,您需要在控制器中生成带有
RegistrationToken.new(:email=>“他们的电子邮件地址”)
的注册令牌

此模型实现随机令牌的生成:

class RegistrationToken < ActiveRecord::Base
  # the secret is just to make the random number generator more secure
  @@secret = 6345
  def initialize
    # info at http://www.ruby-doc.org/core-1.9.3/Random.html
    seed = Random.new().integer(1000000000) + @@secret
    token = Random.new(seed).integer(1000000000);
    # you might want to generate random numbers larger than 1 billion
    # for more security (maybe with 64 bit integers?)
  end
end
然后您只需要设置控制器和视图

对于注册控制器,您只需要以下内容:

class RegistrationsController < ActiveRecord::Base
  def new
    @registration_token = RegistrationToken.find(params[:token]).first
    if @registration_token.nil?
      raise 'Invalid token' # or whatever you want, eg. redirect to a page
    end
    # otherwise render the registration form (can do implicit render)
  end
  def create
    @registration_token = RegistrationToken.find(params[:token]).first
    if @registration_token.nil?
      raise 'Invalid token' # or whatever you want, eg. redirect to a page
    end
    # otherwise create the user, eg.
    User.create(params[:user].merge(:email => @registration_token.email))
    @registration_token.destroy
  end
end
类注册控制器@registration_token.email))
@注册令牌
结束
结束
上面的控制器操作本质上确保它们只能在数据库中找到匹配的令牌时注册