【发布时间】:2020-10-21 05:18:50
【问题描述】:
我有一个非常典型的带有 Devise 和 Devise-JWT 的 Rails 后端。当我向端点 /users/sign_in 发出原始 cURL 请求时,我可以在标头中看到它正在使用令牌设置授权标头。
当我在我的 React 前端(位于不同的端口,因此需要跨源配置)上执行相同的请求时,我在结果中看到的唯一标头是缓存控制和内容类型。
现在,我已经安装了“cors”gem。我创建了一个名为 config/initializers/cors.rb 的初始化程序,并将此配置放入其中:
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'
resource('*',
headers: :any,
expose: ["Authorization"],
methods: :any
)
end
end
然而,当我在我的 React 前端发出请求时,我没有看到 Authorization 标头。
我可以看到 Rails 正在响应 302 重定向。这是问题的一部分吗?我是否需要配置设备以停止响应 302?
我完全不知道问题可能是什么。
如果您观察下面的屏幕截图,通过普通登录方式以正常方式登录会给我一个 Authorization 标头,但如果我通过 AJAX 进行,则没有标头。
这是前端 (AJAX) 代码,它没有给我任何授权标头,只有“缓存控制”和“内容类型”:
async function submitLogin(email, password) {
let formData = new FormData();
formData.append("user[email]", email)
formData.append("user[password]", password)
let result = await Axios.post(`${process.env.API_URL}/users/sign_in`, formData, {maxRedirects: 0})
console.log(result)
}
结果:
【问题讨论】:
-
对不起,我完全误解了你的问题。
-
@ZedTuX np,它发生了:p
-
@blaine-lafreniere 你好,这个问题你解决了吗?
标签: ruby-on-rails devise devise-jwt