Integrace sociálních embedů
Embeddované služby Seznamu nabízejí možnost pro přihlášení využít seznam OAuth. Služba si musí:
- rozšířit scope tokenu o socialmodules.
- definovat před inicializací embedů JS API pro přihlášení a předání tokenu.
JS API
JS API se skládá z globálního objektu SznOauthTokenProvider
se dvěma metodami popsanými níže a dvou DOM událostí pro změnu stavu.
window.SznOauthTokenProvider = {
/**
* Metoda sloužící pro předání OAuth tokenu.
*
* @param {function(string)} Callback čekající na token uživatele,
* případně na hodnotu null pokud uživatel není přihlášen.
*/
getAuthorizationToken(getAuthorizationTokenCallback) {
// Implementace...
},
/**
* Metoda umožňující vyvolat vlastní přihlašovací rozhraní v případech,
* kdy se uživatel chce přihlásit přes embed, např. po uživatelově
* kliknutí na tlačítko "Přihlásit" v embedech.
*
* @param {function(bool)} Callback pro předání informace,
* zda se podařilo vyvolat přihlašovací rozhraní na službě.
* Pokud ne, může embed vyvolat vlastní přihlášení.
*/
signIn(callback: (hasShownDialogCallback) {
// Implementace...
}
}
Embeddované služby Seznamu při inicializaci zkontrolují, zda je přítomen globální objekt SznOauthTokenProvider
. Pokud je objekt přítomen, upraví své chování.
Pokud se uživatel manuálně přihlásí/odhlásí po načtení stránky, je potřeba o tom informovat embedy. Toho je možné dosáhnout vyvoláním jedné z následujících DOM událostí dle uživatelem provedené akce:
szn.oauth.signedin
po úspěšném přihlášení uživatele, následně si embedy opět vyžádají přihlašovací token.szn.oauth.signedout
při odhlášení.
getAuthorizationToken(getAuthorizationTokenCallback)
Tuto metodu využívají sociální embedy pro získání uživatelova OAuth tokenu.
Metoda se volá po načtení embedu nebo po zachycení DOM události szn.oauth.signedin
vyvolané službou po přihlášení uživatele.
Embed metodě předá v argumentu callback. Callback očekává, že bude službou zavolán s uživatelským tokenem pro přihlášeného uživatele nebo s null
pro nepřihlášeného uživatele.
Ukázková implementace
window.SznOauthTokenProvider = window.SznOauthTokenProvider || {};
window.SznOauthTokenProvider.getAuthorizationToken = function(callback) {
// Služba musí implementovat vlastí metodu pro získání tokenu
fetch('/oauth/token').then(function(response) {
return response.ok ? response.text() : null;
}).then(function(token) {
callback(token);
}).catch(function(error) {
callback(null);
});
};
signIn(hasShownDialogCallback)
Pokud je tato metoda přítomna, embedy ji zavolají v případě, že je v nich vyvolaná přihlašovací akce. Pokud metoda neexistuje nebo selže, vyvolá se přihlášení společnosti Seznam.cz, a.s..
Funkce přijímá callback, kterým služba informuje embed o tom, zda se podařilo otevřít přihlašovací dialog. Po úspěšném zobrazení dialogu by služba měla zavolat callback s hodnotou true
, v opačném případě ho musí zavolat s hodnotou false
.
Ukázková implementace s přesměrováním na přihlašovací stránku
window.SznOauthTokenProvider = window.SznOauthTokenProvider || {};
window.SznOauthTokenProvider.signIn = function(hasShownDialogCallback) {
hasShownDialogCallback(true);
window.location.href = "/sign-in";
};
Ukázková implementace vlastní přihlašovací funkce
window.SznOauthTokenProvider = window.SznOauthTokenProvider || {};
window.SznOauthTokenProvider.signIn = function(hasShownDialogCallback) {
try {
// Služba využije vlastní přihlašovací třídu.
var signInDialog = new SignInDialog();
signInDialog.onSignIn = function() {
window.dispatchEvent(new CustomEvent('szn.oauth.signedin'));
};
signInDialog.show();
hasShownDialogCallback(true);
} catch (dialogError) {
hasShownDialogCallback(false);
}
};