Skip to content

Commit

Permalink
Added session bridge call to login for phased launch (#1159)
Browse files Browse the repository at this point in the history
* Added session bridge call to login for phased launch

* Fix code smell for session-bridge in hybrid
  • Loading branch information
shethj authored May 1, 2023
1 parent ebb3a03 commit 00cbf8c
Showing 1 changed file with 40 additions and 9 deletions.
49 changes: 40 additions & 9 deletions packages/template-retail-react-app/app/commerce-api/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,31 @@ class Auth {
return response
}

/**
* Make a post request to the OCAPI /session endpoint to bridge the session.
*
* The HTTP response contains a set-cookie header which sets the dwsid session cookie.
* This cookie is used on SFRA, and it allows shoppers to navigate between SFRA and
* this PWA site seamlessly; this is often used to enable hybrid deployment.
*
* (Note: this method is client side only, b/c MRT doesn't support set-cookie header right now)
*
* @returns {Promise}
*/
createOCAPISession() {
return fetch(
`${getAppOrigin()}/mobify/proxy/ocapi/s/${
this._config.parameters.siteId
}/dw/shop/v22_8/sessions`,
{
method: 'POST',
headers: {
Authorization: this.authToken
}
}
)
}

/**
* Authorizes the customer as a registered or guest user.
* @param {CustomerCredentials} [credentials]
Expand All @@ -210,15 +235,21 @@ class Auth {
} else if (this.refreshToken) {
authorizationMethod = '_refreshAccessToken'
}
return this[authorizationMethod](credentials).catch((error) => {
const retryErrors = [INVALID_TOKEN, EXPIRED_TOKEN]
if (retries === 0 && retryErrors.includes(error.message)) {
retries = 1 // we only retry once
this._clearAuth()
return startLoginFlow()
}
throw error
})
return this[authorizationMethod](credentials)
.then((result) => {
// Uncomment the following line for phased launch
// this._onClient && this.createOCAPISession()
return result
})
.catch((error) => {
const retryErrors = [INVALID_TOKEN, EXPIRED_TOKEN]
if (retries === 0 && retryErrors.includes(error.message)) {
retries = 1 // we only retry once
this._clearAuth()
return startLoginFlow()
}
throw error
})
}

this._pendingLogin = startLoginFlow().finally(() => {
Expand Down

0 comments on commit 00cbf8c

Please sign in to comment.