graphiql-rails icon indicating copy to clipboard operation
graphiql-rails copied to clipboard

Use with devise_token_auth and change_headers_on_each_request config

Open bricesanchez opened this issue 7 years ago • 6 comments

Hi @rmosolgo !

Thanks for your awesome job on GraphQL!

I'm trying to use GraphiQL rails with devise_token_auth gem and with have the change_headers_on_each_request option set to true. So i can't define the headers in the initializer like this :

GraphiQL::Rails.config.headers.merge! User.first.create_new_auth_token

Where could i define this config to be refreshed on every request?

bricesanchez avatar Nov 03 '17 13:11 bricesanchez

my solution for now is to add a decorator on the GraphiQL::Rails::EditorsController :

# app/decorators/controllers/graphiql/rails/editors_controller_decorator.rb
module GraphiQLRailsEditorsControllerDecorator

  def self.prepended(base)
    base.prepend_before_action :authenticate, if: -> { !Rails.env.development? }
    base.prepend_before_action :set_auth_headers, only: :show
  end

  protected

  def authenticate
    http_basic_authenticate_with name: ENV["HBA_LOGIN"], password: ENV["HBA_PASSWORD"]
  end

  def set_auth_headers
    user = User.find_by_email(params[:email])

    if user.present?
       user_auth_token = user.create_new_auth_token

       GraphiQL::Rails.config.headers['access-token'] = -> (context) { user_auth_token['access-token'] }
       GraphiQL::Rails.config.headers['token-type'] = -> (context) { user_auth_token['token-type'] }
       GraphiQL::Rails.config.headers['client'] = -> (context) { user_auth_token['client'] }
       GraphiQL::Rails.config.headers['expiry'] = -> (context) { user_auth_token['expiry'] }
       GraphiQL::Rails.config.headers['uid'] = -> (context) { user_auth_token['uid'] }
    end
  end
end

GraphiQL::Rails::EditorsController.send :prepend, GraphiQLRailsEditorsControllerDecorator

bricesanchez avatar Nov 03 '17 17:11 bricesanchez

Hi there!

Could you give me more details about your implementation? I'm trying to do the same thing so I can always get my user automatically authenticated while testing graphiql.

Thank you!

codingwaysarg avatar Aug 09 '18 02:08 codingwaysarg

Could you give more info like an example or something?

abdul-shajin avatar Aug 20 '18 15:08 abdul-shajin

Hi @codingwaysarg and @abdul-shajin,

I use devise_auth_token with this snippet of code. I can connect to the user by passing the email of User model as param, it's not suitable for production mode.

bricesanchez avatar Aug 21 '18 11:08 bricesanchez

Is this ever going to be merged in or do we fork?

basicBrogrammer avatar Sep 08 '18 20:09 basicBrogrammer

Hi @bricesanchez,

It is an old post but I think this will be a solution for me as well. I am not sure how to use this module with Rails 6 and graphiql-rails 1.7 though...

I tried to put in app/decorators/controllers/graphiql/rails/editors_controller_decorator.rb but it wasn't pick up by Rails.

Then added it under initializers. In this case it was picked up but nothing happens. The GraphiQL::Rails::EditorsController remained unaffected 🤔

Any help is welcome 😄

Thank you!

andredantasrocha avatar May 14 '20 20:05 andredantasrocha