如何在rails中处理加密的URL?

时间:2013-10-17 06:11:50

标签: ruby ruby-on-rails-3 ruby-on-rails-3.2 ruby-on-rails-3.1

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

https://www.domain_name.com?hdurstihnzdfalgfgdfhdrbnhduolsasrtyumyrtyr

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

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

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

如果我加密控制器名称,方法名称和参数,我们通过。路由文件如何知道重定向此URL的位置?如何在路由文件中解密它并在内部重定向到解密的URL?

2 个答案:

答案 0 :(得分:3)

如果您可以对网址稍作修改,生活会更容易,例如:

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

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

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

这样,您就可以访问params[:encoded_path],在这种情况下等于hdurstihnzdfalgfgdfhdrbnhduolsasrtyumyrtyr。从那里,你可以在控制器中解码然后重定向你想要的。

答案 1 :(得分:1)

这不是正确的做法。以下是您可以做的事情:

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

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

创建相应的路线:

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

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

activation_token:string
activated:boolean

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

yourdomain.com/activate?auth_token=user.activation_token