logo

Seznam pro vývojáře

Spravovat služby

Přihlášení přes Seznam

Seznam pro vývojáře › Přihlášení přes Seznam › Integrace sociálních embedů

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í:

  1. rozšířit scope tokenu o socialmodules.
  2. 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:

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);
    }
};