在设计上注销啥都不做
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
在您的页面中输入<%= csrf_meta_tag %>
应该可以。
【讨论】:
就是这样。谢谢。我的应用程序 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 在服务器上啥都不做”?