【发布时间】:2013-02-15 21:53:01
【问题描述】:
我正在与 Chrome 中的管理员用户和其他浏览器中的普通用户一起工作。在我作为管理员销毁其中一个普通用户后,我尝试在被销毁用户正在使用的浏览器中重新打开应用程序。但是,我收到此错误消息
Couldn't find Twitteruser with id=2
所以会话在用户被销毁后仍然存在于浏览器中
会话是这样创建的
def create
twitteruser = Twitteruser.from_omniauth(env["omniauth.auth"])
session[:twitteruser_id] = twitteruser.id
redirect_to twitterquestions_url, notice: "Signed in!"
end
在application_controller中,当前用户是这样创建的
def current_user
@current_user ||= Twitteruser.find(session[:twitteruser_id]) if session[:twitteruser_id]
end
这是销毁动作
def destroy
Twitteruser.find(params[:id]).destroy
flash[:success] = "User destroyed."
redirect_to users_url
end
根据我找到的其他 SO 答案,我尝试以两种不同的方式重置会话,但它们都重置了管理员用户的会话,而不是被破坏的用户
def destroy
Twitteruser.find(params[:id]).destroy
#1. session[:twitteruser_id] = nil destroys my own session, not deleted users
#2. reset_session #reset admin's session
flash[:success] = "User destroyed."
redirect_to twitterusers_url
end
我也尝试将参数传递给 reset_session,但它不接受它们。
谁能告诉我如何清除被破坏的用户会话?谢谢
【问题讨论】:
-
看来你只能是用户并且你(用户)即将清除 Twitteruser 的会话。那么当你做
session[:twitteruser_id] = nil来清除你自己的会话时,怎么可能呢? -
抱歉,OP 中的错误。没有用户,只有 Twitteruser。我现在修好了。这不是会话问题的原因。
-
应用程序如何知道您是
Admin?这是注销操作还是 Twitteruser 删除? -
应用程序知道我是管理员,因为每个用户都有一个管理员字段。删除用户链接仅对管理员布尔值设置为 true 的用户可见。因此,在 Chrome 浏览器中,我以管理员布尔值设置为 true 的用户身份登录,并从用户列表中删除了另一个用户的帐户。
标签: ruby-on-rails