Voorbeelden > Autorisatie maken


1. Inlogscherm maken

Het loginscherm maken we binnen een if-else statement, omdat we niet opnieuw willen inloggen als we al ingelogd zijn. Een voorbeeld van een dergelijk inlogscherm en de code daarvan tref je hieronder aan.

Let op! Dit is ook het e-mail adres waarmee u bestellingen plaatst bij ons bedrijf!

Wachtwoord wijzigen Wachtwoord vergeten

    {% if session.get('__auth_user').ADMIN %}
        <div class="alert alert-groen">

            Welkom {{ Naam.Organisatie }}, 

            U kunt nu bestellen, bestel maar, bestel maar, bestel maar..... 

        </div>

    {% else %}

    <form action="https://documentatie.nodum.io/{{ folder }}/{{ page }}" method="post" role="form" class="form-horizontal">
        <div class="form-group">
            <label for="email" class="col-sm-2 control-label">{{ 'E-mail adres'|t }}</label>
              <div class="col-sm-8">
                <input type="email" class="form-control text-color" name="email" id="UserMail" value="{{ session.get('__AUTH_USER').UserMail }}" required="required">
                        <small><span class="text-rood"><i class="fa fa-exclamation-triangle"></i> {{ 'Let op! Dit is ook het e-mail adres waarmee u bestellingen plaatst bij ons bedrijf!' }}</span></small>
        </div>
            </div>

     <div class="form-group"> 
          <div class="form-inline">
            <label for="name" class="col-sm-2 control-label">{{ 'Wachtwoord'|t }}</label>
                <div class="col-sm-8">
                    <input type="text" class="form-control text-color" name="wachtwoord" id="wachtwoord" value="{{ session.get('__AUTH_USER').wachtwoord }}" required="required">

                       <button type="submit" class="pull-right btn btn-large btn-groen"><i class="fa fa-save"></i> {{ 'Inloggen'|t }}</button>
             </div>       
        </div> 
    </div>
</form>
 <br>

    <a href="{{ index }}/edit:true/" class="pull-right btn btn-large btn-blauw"><i class="fa fa-pencil"></i> {{ 'Wachtwoord vergeten'|t }}</a>

    <a href="https://documentatie.nodum.io/auth/pwchange" class="{% if session.get('__AUTH_USER').ADMIN > 0 %}pull-right{% else %}pull-left {% endif %} btn btn-large btn-groen"><i class="fa fa-key"></i> {{ 'Wachtwoord wijzigen'|t }}</a>

    {% endif %}

Autorisatie instellen


{% raw %} Om onbevoegde gebruikers geen toegang te geven tot bepaalde onderdelen van een project, of juist de te tonen content per gebruiker in te stellen is binnen nodum de mogelijkheid opgenomen om bestanden, mappen en projecten te beveiligen met een login. Hoe deze login werkt is te lezen in dit voorbeeld.

Instellingen
Voor het gebruik van het Auth-object dient [auth] te zijn ingeschakeld in de algemene configuratie van het project. Wanneer ook de functionaliteit 'Wachtwoord vergeten' ('pwreset') gebruikt wordt moeten de stappen voor het instellen van een e-mail-account doorlopen zijn en moet er een geldig template ingegeven worden. Onder het kopje [general] moet tot slot session_start geactiveerd worden, anders is het niet mogelijk om in te loggen.
De gegevens voor het inloggen (e-mail- en wachtwoord-controle) kunnen worden gehaald uit MongoDB of een zelf aan te maken .ini-file. In de toekomst komen daar nog meer providers bij. Onder [auth] kan de gewenste provider ingeschakeld worden. Hoe de verschillende providers onderling verschillen is te vinden in het hoofdstuk Voorbeelden.
Er kan gekozen worden om alle bestanden in het project achter een loginscherm te verbergen of slechts enkele bestanden te voorzien van toegang op basis van e-mail en wachtwoord. Door te kiezen voor 'protectall = 1' worden alle bestanden beschermd. De 'exceptfolder' kan daarnaast worden opgegeven als map die niet beveiligd wordt door een login, waardoor bepaalde bestanden wel voor iedereen beschikbaar zijn. Wanneer alle stappen zijn doorlopen zal het onderdeel [auth] in de algemene instellingen er ongeveer als volgt uitzien:

[auth]
    enabled          = 1
    protectall       = 1                    ; All routing should be protected, nothing can be visited without valid login

    ; exceptfolder   = "external"           ; When protectall is enabled, allow this or these folder(s, array) to be accessed anonymously
    ; masterpassword = "123123_nodum"
    provider         = "mongo"             ; ini, mongo ; Future: mysql, simplicate, external providers

    contacts         = 1                    ; Provide option to select contact or pick first
    pwreset          = 1                    ; Enable "Forgot my Password" feature (sends e-mail)
    pwtemplate       = "newpw"              ; E-mail template for new password ( {{ password }} var. )

    ; altlogintpl    = "login/login.twig"   ; Alternative login screen
    ; altcontacttpl  = "login/contact.twig" ; Alternative pick contact screen
    ; mobilepin      = 1                    ; Allow users to specify a pincode for fast mobile login (less secure)
    ; twofactor      = "HOTP"               ; Allow HOTP security

Configuratiefile als provider

Gebruik dit enkel voor beperkt administratieve omgevingen, waarbij gebruikers niet op hetzelfde moment aan het werk zijn.

Om gebruik te maken van een configuratiefile dient deze als 'auth.ini' in de module Instellingen aangemaakt te worden. Maak een bestand auth (auth.ini) en plaats hier de volgende gegevens in voor iedere gebruiker:

HOTP is optioneel, lastLogin wordt vanzelf aangemaakt, en password mag plaintext zijn (wordt automatisch een hash bij de eerste login). De key van de array (46c7... in het voorbeeld) moet de md5 hash zijn van het e-mail adres. Het maakt niet uit of dit e-mailadres hoofdletters bevat.

[46c7f3d47f064072cd5a9ee856a35558]
    contact             = "37"
    person              = "1000025"
    company             = "1000000"
    companyName         = "iPublications B.V."
    personName          = "Wietse Wind"
    contactMail         = "my-login@ipublications.net"
    password            = "addf6119...6940bc3cb907a884"
    lastLogin           = "2016-03-04T00:01:09"
    HOTP                = "NEHWG...KEBDL3GSVB"

Autorisatie met de Mongo database

Configuratie
Maak een database mongoauth aan, en voeg deze toe aan de configuratie, onder instellingen (meest linkse kolom) in de algemene config onder de mongo sectie:

collection[]          = "mongoauth:mongoauth"

img

Autorisatie Pincode (mobile)
Het is mogelijk om inloggen met een Pin-code toe te staan op mobiele devices: Auth Pincode (mobile).

Deze functionaliteit zal zich, indien ingeschakeld, enkel laten zien op mobiele devices!

Voor mobiele bezoekers kan het handig zijn om, in plaats van iedere keer bij het inloggen een wachtwoord op te moeten geven, een pincode te kunnen kiezen. Gedurende tussen 1 en 2 maand(en) kan vervolgens, op hetzelfde device, opnieuw worden ingelogd met enkel een pincode. Om deze functionaliteit aan te zetten dient de volgende configuratie opgenomen te worden in het auth onderdeel van de configuratie:

[auth]
    ; ...
    mobilepin   = 1

Tevens dient mobiledetect aan te staan onder de [general] configuratie.

Bij het inloggen kan men nu een pincode kiezen, welke wordt opgeslagen als er correct wordt ingelogd. Is er eenmaal een pincode opgeslagen, dan kan een volgende keer met de pincode worden ingelogd, of worden gekozen voor het opnieuw inloggen met username en password. Bij het 1x ingeven van een onjuiste pincode moet men sowieso weer met username en password inloggen.

Wanneer je deze functionaliteit aan zet neemt de veiligheid van de login af, gezien een pincode veel eenvoudiger te raden is dan een wachtwoord.

Voor deze functionaliteit zijn extra vertalingen aanwezig in de Auth Vertalingen.

Routing

Mappen
Het is ook mogelijk een hele pagina of folder af te schermen vanuit de Routing Mappen configuratie met de 'login' parameter. Een routingspad bestaat in principe altijd uit een een map met hierin .twig files.

Indien er geen subpad is opgegeven, zal worden gezocht naar index.twig in de map.

Je doet dit door op het tandwieltje (mapinstellingen) te drukken. En dan onder configuratie de ; weg of toe te voegen naargelang wat je voorkeur.

title="Medewerkers"
translation=0
sort="99"
login=0
hidden=1

De Parameter Title bevat de titel die terug komt in het getFolders object. Indien 'translation' op 1 staat, wordt er vanuit gegaan dat title een translation key is, waarna de titel dus vertaald wordt opgehaald. Met sort kan de volgorde worden gestuurd. Wanneer de auth provider is ingeschakeld biedt login de mogelijkheid om in 1x alle onderliggende pagina's achter een login te stoppen. hidden zorgt er voor dat het onderdeel uit het menu wordt weggelaten. Custom ini-vars kunnen worden opgevraagd met x.ini.y (x = object, y = ini key)

Bestanden
Je kunt dit niet alleen voor mappen instellen maar ook voor bestanden. Hiervoor druk je op het dropdown icoon, rechts op het tabblad van het bestand.

Plaatje

Onder configuratie vind je de volgende gegevens, die je door de ; weg of toe te voegen op actief of niet actief zet.

title="Toevoegen"
translation=0
login=0
sort="1"
hidden=1

De Parameter Title bevat de titel die terug komt in het getFolders object. Indien translation op 1 staat, wordt er vanuit gegaan dat title een translation key is, waarna de titel dus vertaald wordt opgehaald. Met sort kan de volgorde worden gestuurd. hidden=1 zorgt er voor dat het onderdeel uit het menu wordt weggelaten. Custom ini-vars kunnen worden opgevraagd met x.ini.y (x = object, y = ini key)

Autorisatie Vertalingen

auth            = "Autorisatie"
login           = "Inloggen"
pwchange        = "Wachtwoord wijzigen"
logout          = "Uitloggen"
noaccess        = "Geen toegang"
loggedinwelcome = "Je bent ingelogd!"
noaccessdesc    = "Je bent niet ingelogd. Om toegang te krijgen tot deze pagina dien je eerst in te loggen."
relogin         = "Je bent reeds ingelogd. Om opnieuw in te loggen dien je eerst uit te loggen."
pwchangelogin   = "Om je wachtwoord te wijzigen dien je eerst in te loggen."
logoutok        = "Je bent met succes uitgelogd."
loginagain      = "Opnieuw inloggen"
logoutback      = "Terug naar de homepage"
logininstr      = "Geef onderstaand je inloggegevens op."
pwforgot        = "Wachtwoord vergeten"
usernameshrt    = "Gebruikersnaam"
passwordshrt    = "Wachtwoord"
username        = "Gebruikersnaam (e-mail adres)"
password        = "Wachtwoord"
currpassword    = "Huidig wachtwoord"
newpassword     = "Nieuw wachtwoord"
pwrepeat        = "herhaal"
curpassinval    = "Het opgegeven huidige wachtwoord is ongeldig"
changepw        = "Geef je huidige wachtwoord, en twee keer je nieuwe wachtwoord op."
loginexpired    = "De ingevoerde gegevens zijn verlopen. Probeer opnieuw in te loggen."
logininvalid    = "De opgegeven inloggegevens zijn ongeldig."
newpwnoteq      = "De opgegeven nieuwe wachtwoorden zijn niet aan elkaar gelijk."
pwchangedok     = "Je wachtwoord is met succes aangepast. Je kunt in de toekomst inloggen met je zojuist opgegeven (nieuwe) wachtwoord."
userdetails     = "Gebruikersgegevens"
pickcontact     = "Je dient eerst te kiezen als welk contactpersoon je wenst in te loggen."
authcontact     = "Kies contactpersoon"
authcontacts    = "Contactpersonen bij gebruiker"
loginorg        = "Organisatie"
loginper        = "Persoon"
loginlast       = "Je laatste login was op: "
forgotpw        = "Wachtwoord opnieuw instellen"
forgotpwdesc    = "Wanneer je jouw wachtwoord bent vergeten kun je een nieuw wachtwoord laten genereren. Het nieuwe wachtwoord wordt naar je e-mail adres gestuurd (mits je e-mail adres bij ons bekend is)."
checkquestion   = "Controlevraag"
checkcalct      = "maal"
checkcalpl      = "plus"
checkcalmn      = "min"
checkcalc       = "Wat is de uitkomst van de volgende rekensom: "
forgotpwsnd     = "Je verzoek voor het opnieuw instellen van je wachtwoord is verzonden. Als je de gegevens correct heb ingevuld is er nu een e-mail naar je onderweg met je nieuwe wachtwoord."
pwresetmailsj   = "Nieuw wachtwoord"

pincode       = "Pin code"
pincodeexpl   = "Als je de volgende keer in wilt loggen met een pincode geef je onderstaand een pincode van 4 cijfers op. Deze blijft een maand geldig."
usepwipvpin   = "Inloggen met wachtwoord"
pincodevl     = "Geef een pin van 5 cijfers op"

tfhotp        = "2 Factor"
tfloginfirst  = "Om je 2 Factor instellingen te raadplegen dien je eerst ingelogd te zijn."
tfdisabled    = "Gebruik van 2 Factor is in deze omgeving niet ingeschakeld."
tfhotpnolink  = "2 Factor is voor jouw account nog niet ingeschakeld."
tfhotpnolink2 = "Scan met je telefoon de onderstaande QR-code, en geef de 6 controlecijfers op om HOTP in te schakelen."
tfhotpnolinkx = "Gebruik bijvoorbeeld Google Authenticator (iOS, Android), Microsoft Authenticator (Windows Mobile) of Authy (iOS, Android)"
tfhotplinked  = "2 Factor is ingeschaked."
tfhotplinkedx = "Om je 2 Factor koppeling uit te schakelen dien je contact op te nemen met een beheerder."
tfhotpprocess = "Opslaan"
tfhotpcode    = "Code"
tfhotpcodex   = "6 cijferige code"
tfhoterror    = "De ingevoerde code is ongeldig. 2 Factor is niet ingeschakeld."
tfhotpenabled = "2 Factor is ingeschakeld. Voortaan dien je na het inloggen de 2 Factor code op te geven."
tfhotpenter   = "Geef de 6 cijferige 2 Factor code op voor jouw account om in te loggen"

{% endraw %}