如何在不使用Java脚本的情况下在Rails中创建注销按钮?

时间:2019-01-04 07:04:12

标签: javascript ruby-on-rails ruby

我正在创建一个不使用任何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

1 个答案:

答案 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无效。更好的是,首先不要重塑认证轮。