1

这时候我想在用户列表中放一个按钮“断开连接”,以便在需要时完成会话

我正在使用巫术认证

我在“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 %>

我不知道如何执行该按钮,因为当我单击该按钮时,只是完成了当前会话,并没有完成特定用户的会话

谢谢你的帮助

4

3 回答 3

2

会话哈希对于您的会话来说是本地的。在这里阅读。所以当你修改它时,它不会影响其他人。这种方法行不通。

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

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

于 2013-11-08T19:15:20.323 回答
0

Why not just follow this ASCIIcast and log the user out? This seems simpler than actually trying to destroy a user's session manually.

于 2013-11-08T19:09:09.080 回答
0

Maybe because your routes are wrong ? Destroy a session is a DELETE not a GET and you set a params in your index.html.erb using killsession_path(user)

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

and your button have to be like that :

<%= button_to 'Logout', killsession_path(:id_of_selected_user => user.id), :method => :delete %>
于 2013-11-08T19:09:30.003 回答