我正在向用户发送电子邮件,在该电子邮件中有一个链接可将该用户重定向到rails应用程序。我希望该链接具有域名的加密形式,例如:
https://www.domain_name.com?hdurstihnzdfalgfgdfhdrbnhduolsasrtyumyrtyr
当用户点击此链接时,他应该直接重定向到我们在该URL中指定的控制器方法,该方法不可见。
URL中给出的控制器和方法可能因用户而异。
所以我的问题是我们如何在rails中做到这一点。
如果我加密控制器名称,方法名称和参数,我们通过。路由文件如何知道重定向此URL的位置?如何在路由文件中解密它并在内部重定向到解密的URL?
答案 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