2017-10-21 45 views
0

我试图从电子邮件确认后的最后7小时自动登录用户,但是当我单击确认链接时,它会显示“您的电子邮件地址已成功确认。”但不能登录用户。我已将此代码写入我的确认控制器和路线如何在Rails中设计电子邮件确认后登录用户

devise_for :users, controllers: {confirmations: 'users/confirmations'} 

class ConfirmationsController < Devise::ConfirmationsController 
    #private 
    def after_confirmation_path_for(resource_name, resource) 
    sign_in(resource) 
    render plain: "here" 
    redirect_to "/admins/view_account", notice: "User deleted." 
    end 
end 

任何帮助将不胜感激谢谢。

+0

为什么你已经呈现平淡的道: “在这里”? – gates

+0

@gates是的,它是内部确认控制器 – john

+0

@gates ???你的建议是什么? – john

回答

1

注意,自动登录使用的是设计的默认行为电子邮件确认后,然后改变(3.1后),由于安全措施,你可以看到更多的herehere

如果您仍然想这样做,这取决于设计的版本,请确保您的项目中设置下面的横线上config/initializers/devise.rb文件:

config.allow_insecure_sign_in_after_confirmation=true 

如果您正在使用最新设计的版本,你可能有以取而代之的是,在app/controllers/users/confirmations_controller.rb延长使用此代码默认的控制器作为替代,你所提到的什么控制器代码(请介意的命名空间和路径提到):

class Users::ConfirmationsController < Devise::ConfirmationsController 
    def show 
    super do |resource| 
     sign_in(resource) if resource.errors.empty? 
    end 
    end 
end 

并确保您的问题的开始粘贴代码属于在config/routes.rb

devise_for :users, controllers: { confirmations: 'users/confirmations' } 

希望它能帮助!

0

我自己解决了。

路线应该是这样的

devise_for :users, controllers: {confirmations: 'confirmations'} do 
    #put "confirm_user", to: "confirmations#confirm_user" 
    get "confirmation", to: "confirmations#after_confirmation_path_for" 
    end 

控制器是这样

class ConfirmationsController < Devise::ConfirmationsController 
    #private 
    def after_confirmation_path_for(resource_name, resource) 
    sign_in(resource) 
    #render plain: "here" 
    #redirect_to "/admins/" 
    end 

    def show 
    self.resource = resource_class.confirm_by_token(params[:confirmation_token]) 

    if resource.errors.empty? 
     set_flash_message(:notice, :confirmed) if is_flashing_format? 
     sign_in(resource) # <= THIS LINE ADDED 
     redirect_to "/your path/" 
    else 
     respond_with_navigational(resource.errors, :status => :unprocessable_entity){ render :new } 
    end 
    end 


end 
相关问题