我正在使用 Omniauth 来验证我的 JSON API。
提交到 /auth/identity/register 后,我想返回结果而不重定向用户。如何才能做到这一点?
为了允许 OmniAuth::Strategies::Identity.registration_phase 接受 JSON 数据,我通过将第一行替换为以下内容来修补它:
if !env["rack.input"].nil?
attributes = JSON.parse(request.env["rack.input"].read)
else
attributes = (options[:fields] + [:password, :password_confirmation]).inject({}){|h,k| h[k] = request[k.to_s]; h}
end
这工作正常,在失败的情况下,我设置 on_failed_registration 来处理它 - 但在成功的情况下,我只想返回 200 的结果而不是重定向。
我试图按照以下方式对 OmniAuth::Strategies::Identity.callback_phase 进行monkeypatch,但没有成功(即使它正在打印我的puts,它仍然会重定向):
def callback_phase
binding.pry
return fail!(:invalid_credentials) unless identity
if !env["action_dispatch.request.content_type"].to_s.match(/json/).nil?
puts 'Not redirecting because this is JSON.'
return
else
super
end
end