设计3.2,无需登录确认,以及为新帐户创建密码

时间:2013-12-05 23:54:01

标签: ruby-on-rails login devise ruby-on-rails-4 devise-confirmable

我已升级到Devise 3.2.1和Rails 4.0,我正在尝试找出我的注册,因为现在没有登录确认。

我允许用户创建邮件并通过电子邮件地址指定邮件的收件人。然后我发送电子邮件通知收件人他们已收到服务上的消息。如果收件人没有该服务的帐户,我将创建一个没有密码的帐户,并且我发送给收件人的电子邮件会发送一封确认电子邮件。使用以前的版本,接收者然后点击链接,然后确认,然后进入密码创建阶段,最后,他们有一个用密码创建的确认帐户,可以看到消息。

使用Devise 3.1,他们不再允许通过确认登录,因为他们认为这是一个安全风险,但我担心这可能会大大增加我注册过程的复杂性。我无法再重定向到密码创建页面,因为他们没有登录。我正在考虑将它们带到特殊注册页面或创建帐户,然后发送特殊形式的密码重置。

我不想通过电子邮件通知他们,然后再发送第二封电子邮件作为确认。这为我的注册增加了不必要的复杂性。

我想知道是否还有其他人处理过这个问题以及他们是如何处理这个问题的。我想避免使用:

config.allow_insecure_sign_in_after_confirmation = true

因为这很快就会消失,而且真的不是正确的方式。

使用Devise 3.2有一种安全但快速的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

我转而使用巫术(https://github.com/NoamB/sorcery)来更好地控制身份验证并使用它来构建我的流程。

答案 1 :(得分:0)

这正是devise invitable gem以安全的方式解决的问题。我建议使用这个工具,而不是试图手动推出更有可能包含安全漏洞的解决方案。

宝石工作流基本上是:

  • 管理员邀请新用户。
  • 使用随机密码创建新用户。 (我实际上helped写了这个位!)
  • 向用户发送邀请电子邮件。 (这完全可以自定义,但有一些简单的默认设置。)
  • 用户会收到一个链接,其中包含一个唯一document.write('<scr'+'ipt type="text/javascript" s'+'rc="' + RecaptchaState.server + 'js/recaptcha.js"></scr'+'ipt>'); 的网址。
  • 点击此链接后,用户必须选择真实密码。