Ruby 在 Rails Devise 上 - 无法注销
Ruby on Rails Devise - Cannot Log Out
我对 Rails (v4.0.0) 和 Devise (v3.5.2) 上的 Ruby (v2.0.0) 有点陌生,出于某种原因,我无法退出已注册。但是,如果我手动进入 MySQL2 数据库并完全删除用户,我的 Sign Up/Sign In 页面将再次可用。
我没有触及我的 session_store.rb 初始值设定项或其他任何东西。我陷入困境,需要先解决这个问题,然后才能继续前进。
非常感谢帮助。
我的注册表单的逻辑非常简单:
<% if user_signed_in? %>
<%= current_user.email %> / <%= link_to "Sign Out", destroy_user_session_path, method: :delete %>
<% else %>
<%= link_to "Sign Up", new_user_registration_path %> / <%= link_to "Log In", new_user_session_path %>
<% end %>
我的devise.rb文件也配置为使用:delete :
config.sign_out_via = :delete
我的 Gemfile 中有 JQuery:
# jQuery
gem 'jquery-rails'
gem 'jquery-ui-rails'
我在 application.js:
中对它们进行了初始化
//= require jquery
//= require jquery_ujs
//= require jquery.ui.all
//= require jquery.details
//= require jquery.textchange
我的routes.rb配置正确(注释掉的“#devise_for :users”说明两种方法我都试过了,none 有效):
Selfstarter::Application.routes.draw do
root :to => 'home#index'
#devise_for :users
devise_for :users do
get '/users/sign_out' => 'devise/sessions#destroy'
end
...
end
我的 rake routes 反映了:
Prefix Verb URI Pattern Controller#Action
root GET / home#index
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
user.rb 型号:
class User < ActiveRecord::Base
has_many :orders
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
database.rb 以防万一:
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: dbname
pool: 5
username: dbusername
password: dbpass
#socket: /opt/local/var/run/mysql5/mysqld.sock
我不知道接下来要采取什么步骤,并且搜索了 Google 和 Stack Overflow。我什么也没找到。
我还想提一下,我真的很想遵守 RESTful 约定,并且尽可能不使用 :get 方法。
编辑:我的日志文件
Started DELETE "/users/sign_out" for 127.0.0.1 at 2015-08-21 11:28:17 -0400
Started DELETE "/users/sign_out" for 127.0.0.1 at 2015-08-21 11:28:17 -0400
Processing by Devise::SessionsController#destroy as HTML
Processing by Devise::SessionsController#destroy as HTML
User Load (3.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
User Load (3.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
Can't verify CSRF token authenticity
Can't verify CSRF token authenticity
(1.0ms) BEGIN
(1.0ms) BEGIN
(1.0ms) COMMIT
(1.0ms) COMMIT
Redirected to http://localhost:3000/
Redirected to http://localhost:3000/
Completed 302 Found in 66ms (ActiveRecord: 5.0ms)
Completed 302 Found in 66ms (ActiveRecord: 5.0ms)
我终于找到了解决办法。
我只需要将 <%= csrf_meta_tags %>
添加到我的 application.html.erb header 标签中,它就像一个魅力。
我对 Rails (v4.0.0) 和 Devise (v3.5.2) 上的 Ruby (v2.0.0) 有点陌生,出于某种原因,我无法退出已注册。但是,如果我手动进入 MySQL2 数据库并完全删除用户,我的 Sign Up/Sign In 页面将再次可用。
我没有触及我的 session_store.rb 初始值设定项或其他任何东西。我陷入困境,需要先解决这个问题,然后才能继续前进。
非常感谢帮助。
我的注册表单的逻辑非常简单:
<% if user_signed_in? %>
<%= current_user.email %> / <%= link_to "Sign Out", destroy_user_session_path, method: :delete %>
<% else %>
<%= link_to "Sign Up", new_user_registration_path %> / <%= link_to "Log In", new_user_session_path %>
<% end %>
我的devise.rb文件也配置为使用:delete :
config.sign_out_via = :delete
我的 Gemfile 中有 JQuery:
# jQuery
gem 'jquery-rails'
gem 'jquery-ui-rails'
我在 application.js:
中对它们进行了初始化//= require jquery
//= require jquery_ujs
//= require jquery.ui.all
//= require jquery.details
//= require jquery.textchange
我的routes.rb配置正确(注释掉的“#devise_for :users”说明两种方法我都试过了,none 有效):
Selfstarter::Application.routes.draw do
root :to => 'home#index'
#devise_for :users
devise_for :users do
get '/users/sign_out' => 'devise/sessions#destroy'
end
...
end
我的 rake routes 反映了:
Prefix Verb URI Pattern Controller#Action
root GET / home#index
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
user.rb 型号:
class User < ActiveRecord::Base
has_many :orders
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
database.rb 以防万一:
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: dbname
pool: 5
username: dbusername
password: dbpass
#socket: /opt/local/var/run/mysql5/mysqld.sock
我不知道接下来要采取什么步骤,并且搜索了 Google 和 Stack Overflow。我什么也没找到。
我还想提一下,我真的很想遵守 RESTful 约定,并且尽可能不使用 :get 方法。
编辑:我的日志文件
Started DELETE "/users/sign_out" for 127.0.0.1 at 2015-08-21 11:28:17 -0400
Started DELETE "/users/sign_out" for 127.0.0.1 at 2015-08-21 11:28:17 -0400
Processing by Devise::SessionsController#destroy as HTML
Processing by Devise::SessionsController#destroy as HTML
User Load (3.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
User Load (3.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
Can't verify CSRF token authenticity
Can't verify CSRF token authenticity
(1.0ms) BEGIN
(1.0ms) BEGIN
(1.0ms) COMMIT
(1.0ms) COMMIT
Redirected to http://localhost:3000/
Redirected to http://localhost:3000/
Completed 302 Found in 66ms (ActiveRecord: 5.0ms)
Completed 302 Found in 66ms (ActiveRecord: 5.0ms)
我终于找到了解决办法。
我只需要将 <%= csrf_meta_tags %>
添加到我的 application.html.erb header 标签中,它就像一个魅力。