2012-02-01 73 views
0

我有一个rails应用程序,使用devise gem进行用户身份验证。即使设置了confirm_within参数,设计用户也不会登录

我用可确认发送确认邮件给用户。它运行良好。我收到确认电子邮件。我需要在成功登录前确认我的帐户。

我想让他们在确认他们的帐户之前尝试我们的应用一段时间。所以我在设计初始化器中设置了confirm_within。它失败了。用户填写注册表格后,他们将在注册后重定向回登录页面。我查了一下日志,看起来用户没有登录,所以认证失败!过滤前。

这是我的配置。

型号:user.rb

devise :database_authenticatable, :registerable, :encryptable, 
     :recoverable, :rememberable, :trackable, :validatable, :confirmable 

route.rb

devise_for :users, :controllers => {:password => "passwords"} 

初始化器:devise.rb

config.confirm_within = 2.days 

application_controller.rb

def after_sign_in_path_for(resource) 
     stored_location_for(resource) || jobs_path 
    end 

jobs_controller.rb

class JobsController < ApplicationController 
    before_filter :authenticate_user! 

    ***some functions 
    end 

我不知道我做错过什么。有人会好心告诉我如何解决这个问题吗?谢谢。

+0

你有没有签过用户?您需要拨打'sign_in @ user'才能让用户登录。通常,您在提交登录表单时对用户的凭据进行身份验证后会这样做... – Batkins 2012-02-01 21:37:29

+0

感谢回复@Batkins。注册和确认过程由Devise控制。我使用官方宝石,并没有改变任何内部。我检查了源代码,并似乎设计sign_in用户注册#创建已经....任何想法? – 2012-02-02 04:58:06

回答

1

对不起,我不能有更多的帮助,我没有任何与Devise的confirm_within功能合作的经验。但是,according to this question,看起来用户在注册后应该注销,因为他们不应该在登录后才能通过回复电子邮件来确认他们的电子邮件地址,如果我没有弄错的话。如果您希望他们在注册后自动登录,那么我相信您需要删除confirm_within选项。在我看来,confirm_within选项是用户为确认他们注册的电子邮件地址实际上是他们的电子邮件地址(通过单击通过电子邮件发送给他们的链接)的时间。

+0

根据设计文件。 config_within是让用户无需确认帐户即可登录的参数。非常感谢你的帮助。 :) – 2012-02-04 09:13:33

+0

@Batkins是对的。 – Magne 2015-01-28 12:22:15

1

我想你读错文档: “* + allow_unconfirmed_access_for +:你要允许用户确认之前,访问他的帐户 #在此之后,用户访问被拒绝的时候,你可以 #用这个来让你的用户访问你的应用程序的某些功能,而不需要 #确认帐号,但是在一段时间后(即7天)阻止它。 #默认情况下,allow_unconfirmed_access_for为零,这意味着用户总是要确认签名in。 #* +重新确认+:需要确认任何电子邮件变更(与 #初始确认帐号完全相同)需要额外的unconfirmed_ema il #要设置的db字段(在迁移中为t.reconfirmable)。直到确认新电子邮件是 #存储在未经确认的电子邮件列中,并复制到成功的 #确认邮件列。 #* + confirm_within +:发送的确认令牌变为无效之前的时间。 #你可以使用它来强制用户在设定的时间内确认。“

在这里

https://github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb

所以允许用户无需确认登录你必须定义一个特定的时间:

config.allow_unconfirmed_access_for

,并允许用户确认,这在他无法再确认之后,这意味着他需要为该电子邮件发送新的确认信息,因为令牌变得无效:

config.confirm_within

希望它是明确的。

+0

其实config.confirm_within是config.allow_unconfirmed_access_for的旧名称,对不起,我没有看到这篇文章有多大 – 2013-03-12 14:19:23

相关问题