1

我正在向用户发送电子邮件,在该电子邮件中,有一个链接可以将该用户重定向到 Rails 应用程序。我希望该链接采用域名加密形式,例如:

https://www.domain_name.com?hdurstihnzdfalgfgdfhdrbnhduolsasrtyumyrtyr

当用户点击这个链接时,他应该直接重定向到我们在那个不可见的 URL 中指定的控制器方法。

URL 中给出的控制器和方法可能因用户而异。

所以我的问题是我们如何在 Rails 中做到这一点。

如果我加密我们传递的控制器名称、方法名称和参数。路由文件如何知道将这个 URL 重定向到哪里?如何在路由文件中解密它并在内部重定向到解密的 URL?

4

2 回答 2

3

如果您可以对您的网址进行轻微修改,生活会更轻松,例如:

https://www.domain_name.com/enc/hdurstihnzdfalgfgdfhdrbnhduolsasrtyumyrtyr

然后,您可以为该路径创建一个路由以重定向到您想要的位置。

get '/enc/:encoded_path' => "controller#action"

这将使您可以访问,在这种情况下params[:encoded_path]等于。hdurstihnzdfalgfgdfhdrbnhduolsasrtyumyrtyr从那里,您可以在控制器中解码,然后根据需要重定向。

于 2013-10-17T06:37:43.033 回答
1

这不是正确的做法。您可以这样做:

创建一个新的控制器动作,例如激活。

def activate
 activation_token = params[:auth_token]
 ....
  your logic to do whatever with this token
end

创建对应的路由:

match '/activate' => 'your_awesome_controller#activate'

现在,当您向用户发送电子邮件时,我猜您正在发送某种激活令牌。如果没有,请在您的用户表中创建两个新字段:

activation_token:string
activated:boolean

使用一些独特的字符串生成算法来生成您的 activation_token 并将其通过电子邮件发送给您的用户:

yourdomain.com/activate?auth_token=user.activation_token
于 2013-10-17T06:38:52.537 回答