我们使用authlogic,我们希望创建一个用户帐户,并在用户访问某些页面时动态登录。我们有一个函数,我们作为before_filter在我们想要动态创建用户的操作上运行:
#
# Require user account, create an anonymous if no account
#
def require_user_or_create_anonymous
unless current_user
@user = User.new
@user.name = 'Anonymous'
@user.anonymous = 1
@user.crypted_password = ''
@user.password_salt = ''
@user.persistence_token = ''
@user.email = 'email'
@user.save false
@user_session = UserSession.new
end
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.record
end这将创建用户并让用户登录。然而,我们发现它需要另一个页面加载才能激活。如果在特定操作的before_filter中调用此方法,则current_user方法在该操作中仅返回nil。如果页面随后被重新加载,current_user将正确返回用户对象。
你知道怎么解决这个问题吗?
发布于 2010-06-10 05:00:00
我想通了。我需要用下面的代码更新会话信息:
@current_user_session = UserSession.find
@current_user = current_user_session && current_user_session.record在require_user_or_create_anonymous中。
https://stackoverflow.com/questions/3009850
复制相似问题