ruby-on-rails 在http_basic_authenticate_with之后删除会话

cwdobuhd  于 2023-03-24  发布在  Ruby
关注(0)|答案(4)|浏览(115)

我正在学习ruby on rails
我有白色这个代码做登录和autenticate编辑后,但我不知道如何做注销,我只能登录,然后我不能做注销,请帮助我

class PostsController < ApplicationController

http_basic_authenticate_with :name => 'admin', :password => 'meteoro', :except => [:index, :show]
# GET /posts
# GET /posts.json
def index
@posts = Post.all

respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @posts }
end
end

谢谢

3okqufwl

3okqufwl1#

您需要强制客户端释放Authorization头,方法是强制它向另一个请求发出请求
下面是我如何做到的,在/logout视图中,使用jQuery AJAX 调用:

$.ajax({ 
  url : '/empty_200_page', 
  method : 'GET', 
  beforeSend : function(req) { 
    req.setRequestHeader('Authorization', 'nope'); 
  } 
});
62o28rlo

62o28rlo2#

如果你想让用户注销,你可以添加一个空用户名和密码的新操作。例如:

class ArticlesController < ApplicationController
  http_basic_authenticate_with name: "dhh", password: "secret", except: [:index, :show, :logout]
  http_basic_authenticate_with name: "", password: "", only: :logout

  def logout
    redirect_to articles_path
  end

还添加注销路由

Rails.application.routes.draw do
....
  get :logout, to: "articles#logout"
end

并在任何视图文件中添加注销链接

<%= link_to "LOGOUT", :logout %>

当用户单击“注销”链接时,它请求登录。2空的“确定”将注销用户。

sz81bmfz

sz81bmfz3#

HTTP是无状态的,所以它实际上是浏览器(客户端)和服务器的一个约定,让你为给定的请求“登录”。Check out the answer in this post--重要的部分是,一旦身份验证完成,服务器将响应一个Authorization头,浏览器将返回该头。

bweufnob

bweufnob4#

默认情况下,您输入的凭据存储在静态标头中,实际上没有办法从系统注销...
阅读此维基百科条目http://en.wikipedia.org/wiki/Basic_access_authentication#Disadvantages

相关问题