我正在为我的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 设计的更多信息,您应该查看以下内容:
关于iphone - 设计用户注销在 iPhone 上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8383092/