【问题标题】:How can I make a logout button in Rails without using Javascript?如何在不使用 Javascript 的情况下在 Rails 中制作注销按钮?
【发布时间】:2019-05-30 18:13:26
【问题描述】:

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

【问题讨论】:

  • “建议使用 method: :delete,但这需要使用 JavaScript”——根本没有。使用纯 HTML &lt;form action="..." method="delete"&gt;

标签: javascript ruby-on-rails ruby


【解决方案1】:

您可以使用button_to 代替link_to

<%= button_to logout_path, method: :destroy %>

button_to 实际上创建了一个离散的&lt;form&gt; 元素,因此即使没有 javascript 也能正常工作。 method: :destroy 添加了一个隐藏输入,供 Rack::MethodOverride 使用。

注销用户时,您应该重置会话,而不仅仅是从会话存储中删除用户 ID。

def destroy
  reset_session
  redirect_to login_path 
end

这会使整个会话存储 cookie 和 prevents session fixation 无效。更好的是,首先不要重新发明身份验证轮。

【讨论】:

    猜你喜欢
    • 2012-12-28
    • 2017-07-20
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 2015-10-14
    • 2010-12-06
    相关资源
    最近更新 更多