我们正在使用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将正确返回用户对象。
知道怎么解决这个问题吗?
答案 0 :(得分:2)
想出来。我需要用以下内容更新会话信息:
@current_user_session = UserSession.find
@current_user = current_user_session && current_user_session.record
在require_user_or_create_anonymous。