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?
ruby-on-rails grape jsonapi-resources
add a comment |
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?
ruby-on-rails grape jsonapi-resources
add a comment |
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?
ruby-on-rails grape jsonapi-resources
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
ruby-on-rails grape jsonapi-resources
asked 2 days ago
jedi
417415
417415
add a comment |
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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