所以我有这个应用程序,我在用户注册并输入他们的信息之后会在其中创建个人资料。
目前我正在尝试添加一项功能,允许新的未注册用户转到个人资料,以便在他们需要注册之前查看该应用的内容(我计划投放一个"在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
,但我似乎无法让这一切工作。
有人知道如何在按钮点击上创建用户,并自动将其签名为访客个人资料吗?非常感谢你的帮助,我完全迷失了。
答案 0 :(得分:1)
我认为你对访客用户有什么误解。您说您希望访客用户自动登录,这是错误的。访客用户无法登录,因为......好吧,因为他们是来宾。您想要创建它们,但不要签名。
这就是为什么你想在ApplicationController
中使用这些辅助方法的原因,因为当你试图获得current_user
时,如果它不存在(nil
),你将会有一个后备(这就是你使用||
运算符的原因),这会将guest_user
指定为current_user
。
所以,忘记为访客用户使用sign_in链接,你应该没问题。