This file documents important changes needed to upgrade your app's Shopify App version to a new major version.
Version 13.0.0 adds the ability to use both user and shop sessions, concurrently. This however involved a large change to how session stores work. Here are the steps to migrate to 13.x
- REMOVE
config.per_user_tokens = [true|false]this is no longer needed - CHANGE
config.session_repository = 'Shop'Toconfig.shop_session_repository = 'Shop' - ADD (optional) User Session Storage
config.user_session_repository = 'User'
- CHANGE
include ShopifyApp::SessionStoragetoinclude ShopifyApp::ShopSessionStorage
- CHANGE if you are using shop sessions,
@shop_sessionwill need to be changed to@current_shopify_session.
- CHANGE
session[:shopify]is no longer set. Usesession[:user_id]if your app uses user based tokens, orsession[:shop_id]if your app uses shop based tokens.
ShopifyApp::LoginProtection
- CHANGE if you are using
ShopifyApp::LoginProtection#shopify_sessionin your code, it will need to be changed toShopifyApp::LoginProtection#activate_shopify_session - CHANGE if you are using
ShopifyApp::LoginProtection#clear_shop_sessionin your code, it will need to be changed toShopifyApp::LoginProtection#clear_shopify_session
You do not need a user model; a shop session is fine for most applications.
If you override def self.store(auth_session) method in your session storage model (e.g. Shop), the method signature has changed to def self.store(auth_session, *args) in order to support user-based token storage. Please update your method signature to include the second argument.
Add an API version configuration in config/initializers/shopify_app.rb
Set this to the version you want to run against by default. See Shopify API docs for versions available.
config.api_version = '2019-04'You will need to add an api_version method to your session storage object. The default implementation for this is.
def api_version
ShopifyApp.configuration.api_version
endembedded_app.html.erb the usage of shop_session.url needs to be changed to shop_session.domain
<script type="text/javascript">
ShopifyApp.init({
apiKey: "<%= ShopifyApp.configuration.api_key %>",
shopOrigin: "<%= "https://#{ @shop_session.url }" if @shop_session %>",
debug: false,
forceRedirect: true
});
</script>is changed to
<script type="text/javascript">
ShopifyApp.init({
apiKey: "<%= ShopifyApp.configuration.api_key %>",
shopOrigin: "<%= "https://#{ @shop_session.domain }" if @shop_session %>",
debug: false,
forceRedirect: true
});
</script>You will need to also follow the ShopifyAPI upgrade guide to ensure your app is ready to work with API versioning.