Ell*_*iot 8 ruby ruby-on-rails devise ruby-on-rails-3
按照相关的设计教程,我已经陷入了最后的障碍.
Devise生成以下代码以签署用户:
<%= link_to "Sign out", destroy_user_session_path %>
Run Code Online (Sandbox Code Playgroud)
并且在执行时出现路线 rake routes
destroy_user_session DELETE /users/sign_out(.:format)
{:action=>"destroy", :controller=>"devise/sessions"}
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误说:
无法为UsersController找到操作'show'
有任何想法吗?
sle*_*led 22
路径是正确的,但如果你仔细观察,你会发现它不是GET请求而是DELETE请求所以传递方法:
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
Run Code Online (Sandbox Code Playgroud)
编辑:
这应该data-method="delete"为您的链接添加一个属性.验证(查看生成的HTML).如果该属性存在且单击该链接时没有任何反应,请确保您已在布局中包含默认的javascript文件.应该有这样一条线:
<%= javascript_include_tag :defaults %>
在你的布局中.
>>重要<<:您无法在地址栏中键入退出网址并按Enter键,因为它是GET而不是DELETE请求,所以无法正常工作.这背后的魔力是javascript帮助器将挂钩链接的"onclick"事件,然后将隐藏的表单(通过POST)提交到hrefurl 的目标,其中包含一个名为_method"delete" 的隐藏字段.
为什么这一切?这是一个安全问题,否则有人可能会将您重定向到注销页面,只需将您注销,所有未保存的会话内容都将消失...
如果您需要通过GET注销,请将其添加到您的
config/initializers/devise.rb:
config.sign_out_via = :get
| 归档时间: |
|
| 查看次数: |
5362 次 |
| 最近记录: |