首页 > 解决方案 > 反应不将授权标头传递给rails api

问题描述

我正在将 React 前端与 graphql rails api 后端一起用于带有公寓的 SaaS 项目。我需要从 request.env 获取授权令牌,以便我可以解码 user_id 以获取租户名称,这是用户模型中的一个字段。这是基于用户登录的通用电梯。当我检查 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
}

标签: reactjsruby-on-rails-3graphqlapartment-gem

解决方案


推荐阅读