Module: ShopifyApp::ShopSessionStorage

Extended by:
ActiveSupport::Concern
Includes:
SessionStorage
Included in:
Shop
Defined in:
lib/shopify_app/session/shop_session_storage.rb

Instance Method Summary collapse

Instance Method Details

#perform_token_refresh!Object



100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/shopify_app/session/shop_session_storage.rb', line 100

def perform_token_refresh!
  new_session = ShopifyAPI::Auth::RefreshToken.refresh_access_token(
    shop: shopify_domain,
    refresh_token: refresh_token,
  )

  update!(
    shopify_token: new_session.access_token,
    expires_at: new_session.expires,
    refresh_token: new_session.refresh_token,
    refresh_token_expires_at: new_session.refresh_token_expires,
  )
end

#refresh_token_expired?Boolean

Returns:

  • (Boolean)


122
123
124
125
126
# File 'lib/shopify_app/session/shop_session_storage.rb', line 122

def refresh_token_expired?
  return false unless has_attribute?(:refresh_token_expires_at) && refresh_token_expires_at.present?

  refresh_token_expires_at <= Time.now
end

#refresh_token_if_expired!Object



17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/shopify_app/session/shop_session_storage.rb', line 17

def refresh_token_if_expired!
  return unless should_refresh?
  raise RefreshTokenExpiredError if refresh_token_expired?

  # Acquire row lock to prevent concurrent refreshes
  with_lock do
    reload
    # Check again after lock - token might have been refreshed by another process
    return unless should_refresh?

    perform_token_refresh!
  end
end

#should_refresh?Boolean

Returns:

  • (Boolean)


114
115
116
117
118
119
120
# File 'lib/shopify_app/session/shop_session_storage.rb', line 114

def should_refresh?
  return false unless has_attribute?(:expires_at) && expires_at.present?
  return false unless has_attribute?(:refresh_token) && refresh_token.present?
  return false unless has_attribute?(:refresh_token_expires_at) && refresh_token_expires_at.present?

  expires_at <= Time.now
end

#with_shopify_session(auto_refresh: true, &block) ⇒ Object



12
13
14
15
# File 'lib/shopify_app/session/shop_session_storage.rb', line 12

def with_shopify_session(auto_refresh: true, &block)
  refresh_token_if_expired! if auto_refresh
  super(&block)
end