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
- #perform_token_refresh! ⇒ Object
- #refresh_token_expired? ⇒ Boolean
- #refresh_token_if_expired! ⇒ Object
- #should_refresh? ⇒ Boolean
- #with_shopify_session(auto_refresh: true, &block) ⇒ Object
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
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
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 |