Rails如何使用Devise登录访客用户

时间:2014-08-29 03:54:22

标签: ruby-on-rails ruby devise

所以我有这个应用程序,我在用户注册并输入他们的信息之后会在其中创建个人资料。

目前我正在尝试添加一项功能,允许新的未注册用户转到个人资料,以便在他们需要注册之前查看该应用的内容(我计划投放一个"在home_controller#index操作上免费试用#34;按钮。对于身份验证,我使用了Devise gem。

目前,我已经看过Railscast(393),但我无法弄清楚(经过几个小时的尝试)如何实现访客用户并使用Devise登录。

我还在SO上阅读了4个不同的解决方案,并决定坚持这个(how to create a guest user in Rails 3 + Devise):

class ApplicationController < ActionController::Base
    def current_user
      super || guest_user
    end

    private

    def guest_user
     User.find(session[:guest_user_id].nil? ? session[:guest_user_id] = create_guest_user.id : session[:guest_user_id])
    end

    def create_guest_user
      u = User.create(:name => "guest", :email => "guest_#{Time.now.to_i}#{rand(99)}@example.com")
      u.save(:validate => false)
      u
    end

...
end

我在我的application_controller.rb中有这个,并且不了解如何在home_controller #index中使用这些函数来创建访客用户并在&#34;试试&#时登录配置文件34;单击按钮。

我已尝试手动创建user,无需身份验证即可将其保存,然后在链接上使用Devise的sign_in方法,如下所示:<a href="<%= sign_in(:user, some_guest_user) %>">Try it!</a>并尝试过 <a href="<%= profile_path %>">Try it!</a>

我尝试了这个,但是该配置文件会抛出一些验证消息,说我需要登录才能查看它。我还尝试删除before_filter authenticate!上的profiles_controller,但我似乎无法让这一切工作。

有人知道如何在按钮点击上创建用户,并自动将其签名为访客个人资料吗?非常感谢你的帮助,我完全迷失了。

1 个答案:

答案 0 :(得分:1)

我认为你对访客用户有什么误解。您说您希望访客用户自动登录,这是错误的。访客用户无法登录,因为......好吧,因为他们是来宾。您想要创建它们,但不要签名。

这就是为什么你想在ApplicationController中使用这些辅助方法的原因,因为当你试图获得current_user时,如果它不存在(nil),你将会有一个后备(这就是你使用||运算符的原因),这会将guest_user指定为current_user

所以,忘记为访客用户使用sign_in链接,你应该没问题。