Rails应用程序查询参数和基于Cookie的登录



我正试图找到一种方法,通过向他们发送一封带有登录链接的电子邮件来选择性地分发Ruby on Rails应用程序。这应该是访问托管在唯一子域中的页面的唯一方法。此外,我们不打算设置登录墙,因此需要使用Cookie或查询URL参数来保护访问。

关于这方面的几个问题:

  1. 是否可以专门利用cookie来实现这一点?I.e有没有办法在电子邮件本身发送的URL中嵌入cookie
  2. 我觉得一种可行的方法是将用户ID(加密(嵌入电子邮件的URL中。为了让用户不需要将此URL添加为书签或返回电子邮件访问此链接,我计划通过浏览器cookie存储他们的会话ID。这种方法有什么问题吗
  3. 如何避免漫游用户(即尚未收到此电子邮件的用户(访问此页面(即引发404错误的好方法(

还有其他更清洁的方法来完成这项任务吗?

是否可以专门利用cookie来实现这一点?I.e有没有办法在电子邮件中发送的URL中嵌入cookie?

否。你不能"在URL中嵌入cookes";。COOKIE是通过响应中的set-COOKIE标头或通过JavaScript设置的。

我觉得一种可行的方法是嵌入用户ID(加密(在电子邮件的URL中。为了让用户不需要将此URL添加书签或返回电子邮件访问此链接,我计划通过浏览器cookie存储他们的会话ID。任何问题用这种方法?

是。您应该生成一个不与用户id绑定的随机令牌。

如何避免漫游用户(即未收到此消息的用户电子邮件(访问此页面(即,提出404错误的好方法(?

创建用户只能使用一次的限时访问令牌。你真的没有其他方法可以真正知道请求URL的人就是电子邮件的收件人。

如果你想重新发明轮子,你所描述的可以通过Devise Invitable来完成,这是一个非常好的社区测试参考点。

邀请用户时,Invitable会创建邀请令牌,这些令牌存储在用户表中。这只是一个随机字符串。还有一些时间戳列会自动使邀请过期。

该令牌作为查询参数包含在邀请电子邮件的URL中。

当用户单击链接时,控制器会根据令牌查找用户,并将users.invitation_token设为空,这样就不能再次使用它。这会将用户id存储在会话中,并将用户带到一个屏幕,在那里他们可以通过设置密码来编辑和最终确定自己的帐户。

最新更新