iphone - 设计用户注销在 iPhone 上不起作用?

标签 iphone ruby-on-rails devise

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

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 上不起作用

非常感谢。

最佳答案

可能 Mobile Safari 不支持 RESTful 设计,因此无法发送删除 HTTP 请求。

尝试将routes.rb文件中的路由匹配为删除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

然后将 paths.rb 文件中的路由作为 get HTTP 请求添加到该操作。

我部分测试了这些并为我工作。如果您解决了问题,请告诉我,因为我还没有完全测试这些解决方案。

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

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

关于iphone - 设计用户注销在 iPhone 上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8383092/

相关文章:

iphone - 用于临时分发的 iOS4.3 Entitlements.plist

iphone - Xcode "-[UIViewController _loadViewFromNibNamed:bundle:] loaded the nib but the view outlet was not set."错误

iphone - 如何重新创建类似 Pulse 的 UI?

ruby-on-rails - 错误 : rails aborted! LoadError : dlopen(/Users. ..但是是一个不兼容的架构(有 'x86_64' ,需要 'arm64e' ))

ruby-on-rails - 如何在rails中使用elasticsearch

ruby-on-rails - Rails 路由 : What does only: [] do here?

iphone - 兴趣点 API/Web 服务

ruby-on-rails - Rails 中使用 form_for 进行纬度/经度坐标插入

ruby-on-rails - Rails : After putting devise routes in namespace, 模型名称以命名空间为前缀。如何删除它?

ruby-on-rails - 在 Rails 中使用 Devise 3. 添加多个角色?