Rails Grape - adding Grape::Formatter::JSONAPIResources raises anauthenticated error











up vote
0
down vote

favorite












I have a Grape API with a couple of endpoints, plus authentication helpers and error handlers where only Trips and Statistics endpoint require authentication. I use authenticate_user! in there to authenticate the user before he/she can use the resource provided but these endpoint.



Core API



module API
class Core < Grape::API
prefix :api
include ErrorHandlers
helpers AuthHelpers
default_format :json
content_type :json, 'application/json'

mount ::Trips::Base
mount ::Statistics::Base
mount ::Users::Base
end
end


AuthHelpers



module AuthHelpers
def authenticate_user!
begin
payload = JsonWebToken.decode(token)
@current_user = User.find_by(id: payload['user_id'])
rescue
error!(I18n.t('authorization.unauthenticated'), 401)
end
end

def current_user
@current_user ||= authenticate_user!
end

def token
request.headers['Authorization'].split(' ').last
end
end


StatisticsAPI



module Statistics
class Base < API::Core
resources :stats do
before { authenticate_user! }
mount StatisticsAPI
end
end
end


In UsersAPI, though, I do not require authentication for obvious reasons, so no authenticate_user! block there.



UsersAPI



module Users
class Base < API::Core
resources :users do
mount UsersAPI
end
end
end


The problem I have is that after adding



formatter :json, Grape::Formatter::JSONAPIResources



to my API Core.rb class when I try to authenticate on /api/users/login to get the token I get an error 401 Unauthenticated. For some reason after adding the formatter calles authenticate_user! method in UsersAPI where this method is not present. Why is it calling authenticate_user! there?
I know I could move the formatter to each endpoint base class but what if I wanted to use it in all endpoints, not just one? Any ideas?










share|improve this question


























    up vote
    0
    down vote

    favorite












    I have a Grape API with a couple of endpoints, plus authentication helpers and error handlers where only Trips and Statistics endpoint require authentication. I use authenticate_user! in there to authenticate the user before he/she can use the resource provided but these endpoint.



    Core API



    module API
    class Core < Grape::API
    prefix :api
    include ErrorHandlers
    helpers AuthHelpers
    default_format :json
    content_type :json, 'application/json'

    mount ::Trips::Base
    mount ::Statistics::Base
    mount ::Users::Base
    end
    end


    AuthHelpers



    module AuthHelpers
    def authenticate_user!
    begin
    payload = JsonWebToken.decode(token)
    @current_user = User.find_by(id: payload['user_id'])
    rescue
    error!(I18n.t('authorization.unauthenticated'), 401)
    end
    end

    def current_user
    @current_user ||= authenticate_user!
    end

    def token
    request.headers['Authorization'].split(' ').last
    end
    end


    StatisticsAPI



    module Statistics
    class Base < API::Core
    resources :stats do
    before { authenticate_user! }
    mount StatisticsAPI
    end
    end
    end


    In UsersAPI, though, I do not require authentication for obvious reasons, so no authenticate_user! block there.



    UsersAPI



    module Users
    class Base < API::Core
    resources :users do
    mount UsersAPI
    end
    end
    end


    The problem I have is that after adding



    formatter :json, Grape::Formatter::JSONAPIResources



    to my API Core.rb class when I try to authenticate on /api/users/login to get the token I get an error 401 Unauthenticated. For some reason after adding the formatter calles authenticate_user! method in UsersAPI where this method is not present. Why is it calling authenticate_user! there?
    I know I could move the formatter to each endpoint base class but what if I wanted to use it in all endpoints, not just one? Any ideas?










    share|improve this question
























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      I have a Grape API with a couple of endpoints, plus authentication helpers and error handlers where only Trips and Statistics endpoint require authentication. I use authenticate_user! in there to authenticate the user before he/she can use the resource provided but these endpoint.



      Core API



      module API
      class Core < Grape::API
      prefix :api
      include ErrorHandlers
      helpers AuthHelpers
      default_format :json
      content_type :json, 'application/json'

      mount ::Trips::Base
      mount ::Statistics::Base
      mount ::Users::Base
      end
      end


      AuthHelpers



      module AuthHelpers
      def authenticate_user!
      begin
      payload = JsonWebToken.decode(token)
      @current_user = User.find_by(id: payload['user_id'])
      rescue
      error!(I18n.t('authorization.unauthenticated'), 401)
      end
      end

      def current_user
      @current_user ||= authenticate_user!
      end

      def token
      request.headers['Authorization'].split(' ').last
      end
      end


      StatisticsAPI



      module Statistics
      class Base < API::Core
      resources :stats do
      before { authenticate_user! }
      mount StatisticsAPI
      end
      end
      end


      In UsersAPI, though, I do not require authentication for obvious reasons, so no authenticate_user! block there.



      UsersAPI



      module Users
      class Base < API::Core
      resources :users do
      mount UsersAPI
      end
      end
      end


      The problem I have is that after adding



      formatter :json, Grape::Formatter::JSONAPIResources



      to my API Core.rb class when I try to authenticate on /api/users/login to get the token I get an error 401 Unauthenticated. For some reason after adding the formatter calles authenticate_user! method in UsersAPI where this method is not present. Why is it calling authenticate_user! there?
      I know I could move the formatter to each endpoint base class but what if I wanted to use it in all endpoints, not just one? Any ideas?










      share|improve this question













      I have a Grape API with a couple of endpoints, plus authentication helpers and error handlers where only Trips and Statistics endpoint require authentication. I use authenticate_user! in there to authenticate the user before he/she can use the resource provided but these endpoint.



      Core API



      module API
      class Core < Grape::API
      prefix :api
      include ErrorHandlers
      helpers AuthHelpers
      default_format :json
      content_type :json, 'application/json'

      mount ::Trips::Base
      mount ::Statistics::Base
      mount ::Users::Base
      end
      end


      AuthHelpers



      module AuthHelpers
      def authenticate_user!
      begin
      payload = JsonWebToken.decode(token)
      @current_user = User.find_by(id: payload['user_id'])
      rescue
      error!(I18n.t('authorization.unauthenticated'), 401)
      end
      end

      def current_user
      @current_user ||= authenticate_user!
      end

      def token
      request.headers['Authorization'].split(' ').last
      end
      end


      StatisticsAPI



      module Statistics
      class Base < API::Core
      resources :stats do
      before { authenticate_user! }
      mount StatisticsAPI
      end
      end
      end


      In UsersAPI, though, I do not require authentication for obvious reasons, so no authenticate_user! block there.



      UsersAPI



      module Users
      class Base < API::Core
      resources :users do
      mount UsersAPI
      end
      end
      end


      The problem I have is that after adding



      formatter :json, Grape::Formatter::JSONAPIResources



      to my API Core.rb class when I try to authenticate on /api/users/login to get the token I get an error 401 Unauthenticated. For some reason after adding the formatter calles authenticate_user! method in UsersAPI where this method is not present. Why is it calling authenticate_user! there?
      I know I could move the formatter to each endpoint base class but what if I wanted to use it in all endpoints, not just one? Any ideas?







      ruby-on-rails grape jsonapi-resources






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked 2 days ago









      jedi

      417415




      417415





























          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














           

          draft saved


          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53373538%2frails-grape-adding-grapeformatterjsonapiresources-raises-anauthenticated-e%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown






























          active

          oldest

          votes













          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















           

          draft saved


          draft discarded



















































           


          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53373538%2frails-grape-adding-grapeformatterjsonapiresources-raises-anauthenticated-e%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

          Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

          A Topological Invariant for $pi_3(U(n))$