禁用javascript时无法从设计中退出

时间:2017-05-25 12:44:29

标签: ruby-on-rails devise

我在禁用JS时测试我的网站。并得到一个有趣的错误。

当登录com.ibm.ws.webcontainer.servlet.ServletWrapper run SRVE8052E: Logging ClassNotFoundException java.lang.ClassNotFoundException: class java.lang.NullPointerException: null at java.beans.Beans.instantiate(Beans.java:190) at java.beans.Beans.instantiate(Beans.java:75) at com.ibm.ws.webcontainer.servlet.ServletWrapper$1.run(ServletWrapper.java:1461) at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118) at com.ibm.ws.webcontainer.servlet.ServletWrapper.loadServlet(ServletWrapper.java:1450) at com.ibm.ws.webcontainer.servlet.ServletWrapper.load(ServletWrapper.java:1348) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:980) at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3703) at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304) at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:962) at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662) at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:522) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:311) at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:87) at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1783) 并尝试注销时,它会在登录页面上发生。 (Client是设计模型)

我的导航栏有此注销链接:

Client

启用JS后一切正常,但是当JS被禁用时,我收到此错误:

<li><%= link_to 'exit', destroy_client_session_path, method: :delete %></li>

这发生在clients_controller.rb上(我有一个ActiveRecord::RecordNotFound in ClientsController#show Couldn't find Client with 'id'=sign_out 文件夹,其中包含所有设计控制器:clientsconfirmations_controller.rb,...但我也有一个{{ 1}}文件与经典REST:show,...)

show action中的控制器发生错误:

omniauth_callbacks_controller.rb

我在这里检查当前登录的clients_controller.rb是否与导航栏中传递的客户端匹配,因此只有登录的客户端才能看到他们的个人资料......

虽然控制器似乎无法执行检查..

我的问题:为什么注销会将我发送到客户端控制器以及为什么启用或禁用JS会在此处发挥作用?

1 个答案:

答案 0 :(得分:1)

因为设计默认使用delete HTTP谓词,这个技巧取决于jquery-ujs的工作。

= link_to .... method: :delete

根据jquery-ujs docs,除其他事项之外......

  

从超链接发出非GET请求;

您可以在config/initializers/devise.rb

中进行更改
# change :delete to :get
config.sign_out_via = :get

然后你的link_to应该是

= link_to 'exit', destroy_client_session_path