Úvod do Persony

Tak už jste slyšeli o této nové hipsterské přihlašovací službě zvané Persona. Slibuje, že vás zbaví práce s hesly a bude snadné nastavení. Opravdu to jde? Jsem tu, abych vás během několika minut provedl nastavením Persony na vašem vlastním webu. Stručný přehled, co budete muset udělat:

  1. Uchopte podložku include.js
  2. Pro použití navigator.id připojte své přihlašovací tlačítko
  3. Ověřte přihlašovací údaje, které vám navigator.id poskytne na vašem serveru

Pojďme se tedy ponořit, krok za krokem.

include.js

Dokud nebude Persona nativní ve všech prohlížečích, budete muset zahrnout podložku, která poskytuje navigator.id API ve všech prohlížečích. Zatímco je Persona ve verzi beta, doporučujeme propojit přímo s naším serverem. Jakmile se ujistíme, že vnitřnosti jsou přesně takové, jaké chceme, můžeme povzbudit lidi, aby se sami hostili. Takže to hoďte na konec vašeho <body> :

  <script type="text/javascript" src="https://login.persona.org/include.js"></script>

Pomocí navigator.id

Tlačítko

Pokud ještě nemáte přihlašovací tlačítko, přidejte jej do svého označení. Poskytujeme některá tlačítka, která již vypadají docela nabubřele.

navigator.id.request

Budu předpokládat, že používáte jQuery, protože většina to dělá. Pokud používáte něco jiného, ​​měli byste vědět, jaké části změnit.

$("#login-btn").click(function(e) {
    e.preventDefault();
    navigator.id.request();
});

navigator.id.logout

Když je uživatel přihlášen, můžete místo toho zobrazit tlačítko pro odhlášení a připojit jej takto:

$("#logout-btn").click(function(e) {
    e.preventDefault();
    navigator.id.logout();
});

navigator.id.watch

Dále můžeme začít sledovat změny v deklarované identitě. Pokud je tato metoda zavedena, pokud nový uživatel zavřel vaše stránky při potvrzování své e-mailové adresy, můžeme jej stále přesměrovat zpět na váš web a obdržíte událost pro přihlášení. Existuje několik dalších dobrých důvodů, ale to je pravděpodobně ten nejběžnější.

Děláme to pomocí navigator.id.watch() . Trvá to onlogin metoda, onlogout metoda a loggedInUser tětiva. Pokud se domníváte, že je uživatel přihlášen, měli byste předat řetězec e-mailu a my jej znovu zkontrolujeme.

navigator.id.watch({
    onlogin: function(assertion) {
         verifyAssertion(assertion);
    },
    onlogout: function() {
   
    },
    loggedInUser: undefined
});

onlogin bude zavoláno zpětné volání s asercí. Toto je podepsaný blob s daty uvnitř, která v podstatě říká „Slibuji, že to je [email protected]“. Přesto nemůžete klientovi plně důvěřovat. Takže musíte toto tvrzení odeslat na váš server a ověřit, že s ním nebylo manipulováno a že slib není lež. Po úspěšném ověření můžete provádět běžnou relaci, kterou byste normálně dělali, a poté jistěte při všech následujících načtení stránky nastavte loggedInUser na e-mail uživatele.

Ověření

verifyAssertion funkce zobrazená v onlogin callback výše je funkce, kterou implementujete. Opět, za předpokladu jQuery by to mohlo vypadat nějak takto:

function verifyAssertion(assertion) {
    $.post("/auth/verify", { assertion: assertion }, function onSuccess(resp) {
         // maybe you return a json response including the email
         updateUser(resp.email);
    });
};

Stejně jako u shim vám v současné době doporučujeme požádat náš ověřovací server, aby za vás ověřil tvrzení, ale jakmile si budeme jisti, že v procesu ověření nejsou žádné chyby, uvítáme, když si ověřovací metodu sami hostujete na svém vlastním serveru. .

Naše ověřovací služba vrátí platnou odpověď JSON, pokud je tvrzení platné:

{
    "status": "okay",
    "email": "[email protected]",
    "audience": "https://yoursitehere.com",
    "expires": 1308859352261,
    "issuer": "bar.com"
}

Zde je příklad použití Pythonu a knihovny Requests:

data = {'assertion': assertion, 'audience': 'https://yoursitehere.com'}
resp = requests.post('https://verifier.login.persona.org/verify', data=data, verify=True)
json = resp.json()
if json['status'] == 'okay':
    # use json['email'] to do your normal logging in
    # i made up a login mechanism here
    email = json['email']
    user = User.objects.get(email=email)
    if not user:
        user = User.objects.create(email=email)
        session.userid 
    session.userid = user.pk
    return { 'email': email }

Pokud je tvrzení platné, přihlásili jsme uživatele, pokud jsme ho již viděli, nebo vytvořili nového uživatele, pokud ne. Dokážete si představit, co byste dělali, kdyby resp.json['status'] nebylo okay .

To je ono!

Nyní jste se zaregistrovali a Přihlášení implementováno. Nemusíte se obávat hašování hesel, zobrazování captcha nebo podobných záležitostí. Pokud se vám to všechno líbilo, zde je několik dalších zdrojů, kde se dozvíte více a vytěžíte z Persony maximum:

  • navigator.id API
  • Ověřovací rozhraní API
  • Knihovny třetích stran
  • Osobní úložiště
  • Blog Mozilla Identity
  • Identiy mailing list