logo

Seznam pro vývojáře

Spravovat služby

Přihlášení přes Seznam

Seznam pro vývojářePřihlášení přes SeznamIntegrace 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);
    }
};