Skip to content

Commit ab716ff

Browse files
author
David Revelo
committed
Avoid setting current resource on public fields
1 parent d050585 commit ab716ff

4 files changed

Lines changed: 21 additions & 38 deletions

File tree

lib/graphql_devise/schema_plugin.rb

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,12 @@ def trace(event, trace_data)
2424
# Authenticate only root level queries
2525
return yield unless event == 'execute_field' && path(trace_data).count == 1
2626

27-
field = traced_field(trace_data)
28-
provided_value = authenticate_option(field, trace_data)
29-
context = set_current_resource(context_from_data(trace_data))
27+
field = traced_field(trace_data)
28+
auth_required = authenticate_option(field, trace_data)
29+
context = context_from_data(trace_data)
3030

31-
if !provided_value.nil?
32-
raise_on_missing_resource(context, field) if provided_value
33-
elsif @authenticate_default
31+
if auth_required
32+
context = set_current_resource(context)
3433
raise_on_missing_resource(context, field)
3534
end
3635

@@ -89,11 +88,13 @@ def traced_field(trace_data)
8988
end
9089

9190
def authenticate_option(field, trace_data)
92-
if trace_data[:context]
91+
auth_required = if trace_data[:context]
9392
field.metadata[:authenticate]
9493
else
9594
field.graphql_definition.metadata[:authenticate]
9695
end
96+
97+
auth_required.nil? ? @authenticate_default : auth_required
9798
end
9899

99100
def reconfigure_warden!

spec/graphql/user_queries_spec.rb

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
require 'rails_helper'
44

5-
RSpec.describe 'Sign Up process' do
5+
RSpec.describe 'Users controller specs' do
66
include_context 'with graphql schema test'
77

88
let(:schema) { DummySchema }
@@ -58,12 +58,6 @@
5858
end
5959
end
6060
end
61-
62-
context 'when user is not authenticated' do
63-
it 'returns a must sign in error' do
64-
expect(response[:errors]).to contain_exactly(hash_including(**private_error))
65-
end
66-
end
6761
end
6862

6963
context 'when using an interpreter schema' do
@@ -76,12 +70,6 @@
7670
expect(response[:data][:privateField]).to eq(private_message)
7771
end
7872
end
79-
80-
context 'when user is not authenticated' do
81-
it 'returns a must sign in error' do
82-
expect(response[:errors]).to contain_exactly(hash_including(**private_error))
83-
end
84-
end
8573
end
8674
end
8775

@@ -106,14 +94,6 @@
10694
expect(response[:data][:user]).to match(**user_data)
10795
end
10896
end
109-
110-
context 'when user is not authenticated' do
111-
let(:field) { 'user' }
112-
113-
it 'returns a must sign in error' do
114-
expect(response[:errors]).to contain_exactly(hash_including(**private_error))
115-
end
116-
end
11797
end
11898

11999
context 'when using an interpreter schema' do

spec/requests/user_controller_spec.rb

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,6 @@
3131
expect(json_response[:data][:publicField]).to eq('Field does not require authentication')
3232
end
3333
end
34-
35-
context 'when using the failing route' do
36-
it 'raises an invalid resource_name error' do
37-
expect { post_request('/api/v1/failing') }.to raise_error(
38-
GraphqlDevise::Error,
39-
'Invalid resource_name `fail` provided to `graphql_context`. Possible values are: [:user, :admin, :guest, :users_customer, :schema_user].'
40-
)
41-
end
42-
end
4334
end
4435

4536
describe 'privateField' do
@@ -77,6 +68,15 @@
7768
)
7869
end
7970
end
71+
72+
context 'when using the failing route' do
73+
it 'raises an invalid resource_name error' do
74+
expect { post_request('/api/v1/failing') }.to raise_error(
75+
GraphqlDevise::Error,
76+
'Invalid resource_name `fail` provided to `graphql_context`. Possible values are: [:user, :admin, :guest, :users_customer, :schema_user].'
77+
)
78+
end
79+
end
8080
end
8181

8282
context 'when using an interpreter schema' do

spec/support/contexts/schema_test.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
# frozen_string_literal: true
2+
13
RSpec.shared_context 'with graphql schema test' do
24
let(:variables) { {} }
3-
let(:resource_names) { [] }
5+
let(:resource_names) { [:user] }
46
let(:resource) { nil }
57
let(:controller) { instance_double(GraphqlDevise::GraphqlController) }
68
let(:context) do

0 commit comments

Comments
 (0)