完成特定用户的会话

时间:2013-11-08 18:53:19

标签: ruby-on-rails session

此时我想在用户列表中添加一个按钮" Disconnect"在我需要的时候完成会议

我使用巫术认证

我在" routes.rb"

中添加了一条新路线
get "killsession"    => "users#killsession",  :as => "killsession"

我在" users_controller.rb"

中也有一个方法
def killsession
    session[:user_id] = nil
    redirect_to root_url
end

在文件" index.html.erb"的视图中我有它

        <% @users.each do |user| %>
        <tr>
            <td><%= image_tag "#{user.definir_status_icono}" %></td>
            <td><%= user.id %></td>
            <td><%= user.username.capitalize %></td>
            <td><%= user.name %></td>
            <td><%= user.last_login_at.strftime("%l:%M %p, %B %d, %Y") rescue nil %></td>
            <td>
                <%= user.last_logout_at.strftime("%l:%M %p, %B %d, %Y") rescue nil %>
            </td>
            <td>
                <%= link_to "Ver Mas", edit_user_path(user), 
                    :class => 'btn btn-mini btn-primary' %>

                <%= link_to 'Eliminar', user_path(user), 
                    :confirm    => "Esta seguro ?", 
                    :method     => :delete,
                    :remote     => true,
                    :class      => 'btn btn-mini btn-danger' %>

                <% if user.online == 1 %>
                    <%= link_to "Disconnect", killsession_path(user), 
                        :class => 'btn btn-mini btn-warning' %>
                <% else %>
                    <%= link_to "Disconnect", '', 
                        :class => 'btn btn-mini btn-warning',
                        :disabled => true %>
                <% end %>
            </td>
        </tr>
    <% end %>

我不知道如何使用该按钮,因为当我点击该按钮时,只完成当前会话,并且没有完成特定用户的会话

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

会话哈希是你的会话本地的。阅读它here。因此,当您修改它时,它不会影响其他任何人。这种方法不起作用。

通常,您无法直接访问其他用户的会话数据。如果您使用cookie存储(默认!),它将存储在本地浏览器中。如果您使用了例如ActiveRecordStore,则可能直接篡改数据库表。但我强烈反对它 - 出于安全原因以及轻松更改会话存储的可能性。

现在,您想要注销另一个用户 - 任何身份验证库都应该允许它。如果你使用设计,它就像sign_out user一样简单。如果您编写了自己的身份验证模块,您应该知道如何销毁会话(可能在用户表中重置用户的会话令牌?)

答案 1 :(得分:0)

为什么不关注this ASCIIcast并将用户注销?这似乎比实际尝试手动销毁用户会话更简单。

答案 2 :(得分:0)

也许是因为你的路线错了?销毁会话是DELETE而不是GET,你使用killsession_path(用户)在index.html.erb中设置一个参数

# The :as is useless
delete "/killsession/:id_of_selected_user" => "users#killsession"

你的按钮必须是这样的:

<%= button_to 'Logout', killsession_path(:id_of_selected_user => user.id), :method => :delete %>