在设计上注销啥都不做

Posted

技术标签:

【中文标题】在设计上注销啥都不做【英文标题】:Log Out on devise does nothing在设计上注销什么都不做 【发布时间】:2015-10-06 10:26:22 【问题描述】:

我正在建立一个博客,并且我的注册工作正常,权限设置完美,但我无法注销用户..

这是我注销时在控制台中看到的内容:

Started DELETE "/users/sign_out" for 127.0.0.1 at 2015-07-16 14:41:07 -0500
Processing by Devise::SessionsController#destroy as html
  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ?  ORDER BY "users"."id" ASC LIMIT 1  [["id", 1]]
Can't verify CSRF token authenticity
   (0.0ms)  begin transaction
   (0.1ms)  commit transaction
Redirected to http://localhost:3000/
Completed 302 Found in 4ms (ActiveRecord: 0.2ms)

这是我的应用程序 erb 文件的样子:

<% if user_signed_in? %>            
    <div class="buttons">
        <button class="button"><%= link_to "New Post", new_post_path %></button>
        <button class="button"><%= link_to "Log Out", destroy_user_session_path, :method => :delete %></button>
    </div>
<% end %>

我在初始化器 devise.rb 文件中有库存设置

 # The default HTTP method used to sign out a resource. Default is :delete.
  config.sign_out_via = :delete

但由于某种原因,当我按下注销按钮时,我没有注销。

这是我的 routs.rb(添加了“devise_for :users do”代码以尝试使其工作):

Rails.application.routes.draw do
  devise_for :users do
  get '/users/sign_out' => 'devise/sessions#destroy'
end
  resources :posts do
  resources :comments
  end

  root "posts#index"

  get '/about', to: 'pages#about'

end

Haaalp....谢谢。

kb

【问题讨论】:

【参考方案1】:

问题是请求没有发送CSRF 令牌。查看服务器日志的第 4 行:

Can't verify CSRF token authenticity

在您的页面中输入&lt;%= csrf_meta_tag %&gt; 应该可以。

【讨论】:

就是这样。谢谢。我的应用程序 erb 文件中缺少该标签。【参考方案2】:

在你的 layouts/application.html.erb 中添加

<head>
  <%= csrf_meta_tags %>
</head>

您只能尝试以下几行:

devise_for :users

而不是这些行

 devise_for :users do
  get '/users/sign_out' => 'devise/sessions#destroy'
 end

【讨论】:

不做任何事情..它重定向回索引页面,但保持登录状态.. :( 您是否将 放入您的 layouts/application.html.erb 中? 苦于自己设计,所以如果我问:如果你说:method: 'delete' 作为你的销毁路径,你的路由不应该指向devise/sessions#destroy 吗?或者反过来:将您的路线指向 devise/sessions#destroy ,然后指向 method: destroy 而不是 method: delete ?我现在不能自己尝试,但我很好奇。

以上是关于在设计上注销啥都不做的主要内容,如果未能解决你的问题,请参考以下文章

如何修复“警告:useLayoutEffect 在服务器上啥都不做”?

在任一值上过滤数据集或啥都不做

如何创建啥都不做的#define?

Process.Start() 啥都不做

运行 ng build 时,index.html 啥都不做?

将图片绘制到视图的画布上啥都不做