【问题标题】:Devise user logout not working on iPhone?设计用户注销在 iPhone 上不起作用?
【发布时间】:2014-03-28 19:21:34
【问题描述】:

我正在为我的 Rails 应用程序设计 iPhone 视图,我使用 devise gem 进行身份验证,但是当我在 iphone 视图中注销时,它不起作用,我检查了日志,我发现了这个:

Started GET "/users/sign_out" for 127.0.0.1 at 2011-12-05 17:06:24 +0800
Processing by UsersController#show as HTML
Parameters: {"id"=>"sign_out"}

我知道GET 是问题所在,但是当我在我的桌面浏览器(如 Chrome 和 Safari)中进行测试时,注销操作是通过DELETE 方法:

Started DELETE "/users/sign_out" for 127.0.0.1 at 2011-12-05 17:14:58 +0800
Processing by Devise::SessionsController#destroy as HTML

这是我的路线配置:

devise_for :users
resources :users, :only => :show

和注销链接:

<%= link_to 'Logout', destroy_user_session_path, :method => :delete %>

我只是想知道为什么注销链接在 Mobile Safari 上不起作用

非常感谢。

【问题讨论】:

  • 这个问题解决了:我不包括jquery和jquery_ujs,jquery_ujs倾向于支持“从超链接发出非GET请求”。

标签: iphone ruby-on-rails devise


【解决方案1】:

可能 Mobile Safari 不支持 RESTful 设计,所以无法发送 Delete HTTP 请求。

尝试将您的 routes.rb 文件中的路由匹配为 Delete HTTP 请求

match "/logout" => "devise/sessions#destroy", :via => [:delete]

那么,你的退出链接应该是这样的

<%= link_to 'Sign Out', logout_path %>

如果不起作用,请尝试像这样覆盖 Devise::SessionsController:

class SessionsController < Devise::SessionsController
 def log_out
  #custom log_out
 end
end

然后将您的 routes.rb 文件中的路由作为获取 HTTP 请求添加到该操作。

我对这些进行了部分测试并为我工作。如果你解决了,请告诉我,因为我还没有完全测试过这些解决方案。

如果您需要有关 RESTful 设计的更多信息,您应该查看以下内容:

http://www.slideshare.net/calamitas/restful-best-practices

【讨论】:

    【解决方案2】:

    包括 jquery 和 jquery_ujs。

    <%= javascript_include_tag "jquery", "jquery_ujs" %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      • 2018-10-23
      • 2018-10-26
      • 2015-04-04
      • 1970-01-01
      相关资源
      最近更新 更多