gpt4 book ai didi

ruby-on-rails - jail 长验证召回未被召唤

转载 作者:数据小太阳 更新时间:2023-10-29 07:16:59 31 4
gpt4 key购买 nike

我正在尝试使用 devise 进行 ajax 登录,但我似乎无法正常工作。问题是我在设计上启用了可确认的策略,warden.authenticate!应该在非事件用户上失败并呈现 failure 操作,而不是呈现默认操作。我注意到许多教程都有相同的设置。我正在使用 rails 4.0.0 并设计 3.2.2。

class SessionsController < Devise::SessionsController
def create
#problem: failure not getting called
resource = warden.authenticate!(scope: resource_name, recall: "#{controller_path}#failure")
sign_in(resource_name, resource)
render json: {success: true}
end

def failure
render json: {success: false, errors: ["Login failed!"]}
end
end

devise.rb 设置如下,

config.http_authenticatable_on_xhr = false
config.navigational_formats = ['*/*', :'*/*', :html, :json]

routes.rb 有以下内容,

devise_for :users, controllers: {registrations: "registrations", sessions: "sessions"}

登录表单,

 <%= form_for(resource, as: resource_name, 
url: session_path(resource_name),
format: :json,
html:{id:"signin_form"},
remote: true) do |f| %>
<%= f.label(:email, "Email") %>
<%= f.text_field(:email, class: "field text") %>
<%= f.label(:password, "Password") %>
<%= f.text_field(:password, class: "field text", id: "user_signin_password") %>

<%= f.submit "Sign in", class: "theme_color btn key" %>
<% end %>

由于未调用failure 操作,默认的new 操作使用响应 header 呈现,如下所示,

Content-Type   text/html; charset=utf-8
Location http://localhost:3000/users/sign_in.js

我也很好奇为什么它渲染.js而不是.json

有人可以指出我错过了什么吗?谢谢

最佳答案

在花费数小时调试应用程序后,我发现设备的 activatable.rb 中存在错误文件。当我按照选项进行操作时,发现该设备的注册钩子(Hook) after_set_user 不会随 recall 选项一起抛出。

这似乎只发生在尝试使用现有电子邮件/用户名登录的非事件帐户(已启用可确认策略,但帐户尚未确认)。但是,如果尝试使用不存在的电子邮件/用户名登录,上面的代码确实可以作为 authenticate! throws :warden with the recall 选项。

我很高兴有人也发现了同样的错误并提供了补丁,但很好奇为什么他们不与它合并。可以找到解决方案 here !

关于ruby-on-rails - jail 长验证召回未被召唤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20390617/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com