反应不将授权标头传递给Rails API

时间:2019-05-06 02:43:15

标签: reactjs ruby-on-rails-3 graphql apartment-gem

我正在将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
}

0 个答案:

没有答案