gpt4 book ai didi

ruby-on-rails - Rails API 空请求 header

转载 作者:行者123 更新时间:2023-12-05 07:31:25 27 4
gpt4 key购买 nike

从 javascript 向 Rails 发送请求并提供带有 token 的 Authorization header 在我的 Rails API 上始终显示为空 header 。

我的所有 API Controller 都有以下基本代码:

module Api
class BaseController < ActionController::API
before_action :require_login

private

def require_login
unless signed_in?
head :unauthorized
end
end

def signed_in?
current_user.present?
end

def current_user
if request.headers['Authorization'].present?
User.find_by(token: request.headers['Authorization'])
else
nil
end
end
end

结束

像这样在 javascript 端执行我的获取请求:

  fetch(`/api/clients?page=${page}`, {
headers: {
Accept: "application/json",
"Content-Type": "application/json",
'Authorization': AUTH_TOKEN
},
credentials: 'same-origin',
})

request.headers 获取值 Authorization 总是出现 nil。

有人知道哪里出了问题吗?

最佳答案

由于您使用的是 Fetch()库,您可以使用 new Request()帮助您自定义配置的对象。

// https://developer.mozilla.org/en-US/docs/Web/API/Request/Request

var myHeaders = new Headers({
"Content-Type": "application/json",
'Authorization': AUTH_TOKEN
});

var myInit = { method: 'GET',
headers: myHeaders,
mode: 'cors',
cache: 'default' };

var myRequest = new Request(`/api/clients?page=${page}, myInit);

fetch(myRequest).then(function(response) {
...
});

我在使用 Axios 时遇到了同样的问题,结果我使用了带有 header 和参数的 get 请求错误地.


const params = { id: "ghjfsd7634" };

const headers = {
headers: {
"Content-Type": "application/json",
Authorization: token,
},
};


axios
.get(url, params, headers)
.then(function foo(response) {
handleResponse(response.data);
})
.catch(function foo(error) {
console.log("GET Resource Error");
console.log(error);
});

正确方式: get 请求中的参数和 header 与 post 相比传递方式不同put 等请求。 Axios takes the entire config in the second argument, not a list of config objects. Put the params inside the config, and pass the entire object as the second argument :

 const params = { id: "ghjfsd7634" };
const headers = {
"Content-Type": "application/json",
Authorization: token,
};

const config = { headers, params };

await axios
.get(url, config)
.then(function foo(response) {
handleResponse(response.data);
})
.catch(function foo(error) {
console.log("GET Resource Error");
console.log(error);
});

关于ruby-on-rails - Rails API 空请求 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51812532/

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