此时我想在用户列表中添加一个按钮" 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 %>
我不知道如何使用该按钮,因为当我点击该按钮时,只完成当前会话,并且没有完成特定用户的会话
感谢您的帮助
答案 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 %>