7

我已经按照这个 GoRails 视频让 Devise 使用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 初始化程序编辑为如下所示

我的 package.json 有@hotwired/turbo-rails": "^7.0.0-beta.5,但在 Chris 的源代码中,beta.3这似乎不是问题。

我在这里想念什么?

4

3 回答 3

2

我遇到了同样的问题,结果发现没有触发导航。将 :turbo_stream 附加到 initializers/devise.rb 中的这一行为我解决了这个问题:

Devise.setup do |config|
  [...]
  config.navigational_formats = ['*/*', :html, :turbo_stream]
  [...]
end
于 2021-04-23T09:54:58.507 回答
0

我通过将我所有的 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 %>

然后,我form_for的输入views/devise/sessions/new.html.erb看起来像这样: <%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>

于 2021-05-20T18:59:40.373 回答
0

我的解决方案是不要app/javascript/packs/your_application.js在登录页面的布局中使用。

相反,您可以编写一个新的 js,例如app/javascript/packs/blank.js,在 thisblank.js中,不要添加import "@hotwired/turbo-rails".

并在设计页面blank.js的新布局文件中使用,如下所示:app/views/layouts/blank.html.erbsign_in

<head>
    <%= javascript_pack_tag 'blank' %>
    <%= stylesheet_pack_tag 'blank' %>
</head>
于 2021-11-12T02:17:52.297 回答