我正在将React前端与带有库的SaaS项目的graphql rails api后端一起使用。我需要从request.env获取授权令牌,以便我可以解码user_id以获得租户名称,该名称是User模型中的一个字段。这是基于登录用户的通用电梯。当我检查Rails记录器日志时,看到“ HTTP_AUTHORIZATION” =>“”“为空。我怎么了
这来自添加了授权的index.js:
const authLink = setContext((_, { headers }) => {
const token = localStorage.getItem(AUTH_TOKEN)
return {
headers: {
...headers,
authorization: token ? `Bearer ${token}` : ''
}
}
})
const client = new ApolloClient({
link: authLink.concat(httpLink),
cache: new InMemoryCache()
})
ReactDOM.render(
<BrowserRouter>
<ApolloProvider client={client}>
<App />
</ApolloProvider>
</BrowserRouter>,
document.getElementById('root')
);
这是我尝试在Rails中提取它的地方:
Rails.application.config.middleware.use Apartment::Elevators::Generic, lambda { |request|
tenant_name = nil
if request.env["HTTP_AUTHORIZATION"]
token = request.env["HTTP_AUTHORIZATION"]
payload = JWT.decode token, Rails.application.secrets.secret_key_base, 'HS256'
user_id = payload.first["user_id"]
tenant_name = User.find(user_id).subdomain
end
tenant_name
}