我正在创建一个不使用任何Javascript的Rails应用程序,并且我想知道如何实现注销按钮以将会话设置为“ nil”。大多数教程建议使用“ method::delete”,但是这需要使用JavaScript。
会话控制器:
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_username(params[:session][:name])
if user && user.authenticate(params[:session][:password])
session[:user_id] = user.id
redirect_to '/posts'
else
session[:user_id] = nil
flash[:warning] = "Failed login- try again"
redirect_to '/login'
end
end
def destroy
session[:session_id] = nil
redirect_to login_path
end
end
答案 0 :(得分:0)
您可以使用button_to
代替link_to
。
<%= button_to logout_path, method: :destroy %>
button_to
实际上创建了一个离散的<form>
元素,因此即使没有JavaScript也可以正常工作。 method: :destroy
添加一个隐藏的输入,供Rack::MethodOverride
使用。
注销用户时,您应该重置会话,而不仅仅是从会话存储中删除用户ID。
def destroy
reset_session
redirect_to login_path
end
这会使整个会话存储cookie和prevents session fixation无效。更好的是,首先不要重塑认证轮。