使用 Hotwire 时如何显示 Devise 登录表单错误 Rails
How to display Devise login form errors when using Hotwire Rails
我 followed this GoRails video to get Devise working with hotwire-rails。我不知道为什么我的登录错误消息与视频中的方式不一样。错误消息在注册表单上运行良好,但在登录表单上出现此错误:
Processing by Devise::SessionsController#create as TURBO_STREAM
Parameters: {"authenticity_token"=>"[FILTERED]", "user"=>{"email"=>"elvis@example.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"}
Completed 401 Unauthorized in 2ms (ActiveRecord: 0.0ms | Allocations: 406)
正如 Chris 在视频中所建议的那样,我已将我的 Devise 初始值设定项编辑为 this。
我的 package.json 有 @hotwired/turbo-rails": "^7.0.0-beta.5
,但在克里斯的剧集源代码中它是 beta.3
,所以这似乎不是问题所在。
我在这里错过了什么?
我遇到了同样的问题,结果发现没有导航触发器。将 :turbo_stream 附加到 initializers/devise.rb 中的这一行为我解决了它:
Devise.setup do |config|
[...]
config.navigational_formats = ['*/*', :html, :turbo_stream]
[...]
end
我通过将我所有的 flash 错误/通知统一为一个部分而不是将 flash 通知部分和一个单独的表单错误块来实现这一点:
我把这个放在我的 layouts/application.rb
:
<%= render "shared/notices" %>
部分看起来像这样:
<% flash.each do |msg_type, message| %>
<div class="alert">
<div class="container">
<button class="close" data-dismiss="alert"><span>×</span></button>
<%= message %>
</div>
</div>
<% end %>
然后,我在 views/devise/sessions/new.html.erb
中的 form_for
看起来像这样:
<%= form_for(资源, 如: resource_name, url: session_path(resource_name)) do |f| %>
我的解决方案是,您不要在 sign_in 页面的布局中使用 app/javascript/packs/your_application.js
。
相反,你可以像app/javascript/packs/blank.js
那样写一个新的js,在这个blank.js
中,不要添加import "@hotwired/turbo-rails"
。
并在 Devise sign_in
页面中使用新布局文件 app/views/layouts/blank.html.erb
中的 blank.js
,像这样:
<head>
<%= javascript_pack_tag 'blank' %>
<%= stylesheet_pack_tag 'blank' %>
</head>
我 followed this GoRails video to get Devise working with hotwire-rails。我不知道为什么我的登录错误消息与视频中的方式不一样。错误消息在注册表单上运行良好,但在登录表单上出现此错误:
Processing by Devise::SessionsController#create as TURBO_STREAM
Parameters: {"authenticity_token"=>"[FILTERED]", "user"=>{"email"=>"elvis@example.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"}
Completed 401 Unauthorized in 2ms (ActiveRecord: 0.0ms | Allocations: 406)
正如 Chris 在视频中所建议的那样,我已将我的 Devise 初始值设定项编辑为 this。
我的 package.json 有 @hotwired/turbo-rails": "^7.0.0-beta.5
,但在克里斯的剧集源代码中它是 beta.3
,所以这似乎不是问题所在。
我在这里错过了什么?
我遇到了同样的问题,结果发现没有导航触发器。将 :turbo_stream 附加到 initializers/devise.rb 中的这一行为我解决了它:
Devise.setup do |config|
[...]
config.navigational_formats = ['*/*', :html, :turbo_stream]
[...]
end
我通过将我所有的 flash 错误/通知统一为一个部分而不是将 flash 通知部分和一个单独的表单错误块来实现这一点:
我把这个放在我的 layouts/application.rb
:
<%= render "shared/notices" %>
部分看起来像这样:
<% flash.each do |msg_type, message| %>
<div class="alert">
<div class="container">
<button class="close" data-dismiss="alert"><span>×</span></button>
<%= message %>
</div>
</div>
<% end %>
然后,我在 views/devise/sessions/new.html.erb
中的 form_for
看起来像这样:
<%= form_for(资源, 如: resource_name, url: session_path(resource_name)) do |f| %>
我的解决方案是,您不要在 sign_in 页面的布局中使用 app/javascript/packs/your_application.js
。
相反,你可以像app/javascript/packs/blank.js
那样写一个新的js,在这个blank.js
中,不要添加import "@hotwired/turbo-rails"
。
并在 Devise sign_in
页面中使用新布局文件 app/views/layouts/blank.html.erb
中的 blank.js
,像这样:
<head>
<%= javascript_pack_tag 'blank' %>
<%= stylesheet_pack_tag 'blank' %>
</head>