Een webapp maken vanuit kras met AngularJS en Firebase deel 8

In het vorige deel van deze tutorialserie hebben we de Ladda-laadindicator toegevoegd aan onze applicatie om deze interactiever te maken. We hebben ook gezien hoe het gegevensresultaat moet worden gefilterd terwijl gegevens uit firebase worden opgehaald. In dit deel van de zelfstudie zullen we de uitlogfunctie toevoegen en een aantal problemen oplossen.

Ermee beginnen

Laten we beginnen met het klonen van het vorige deel van de tutorial vanuit GitHub.

git clone https://github.com/jay3dec/AngularJS_Firebase_Part7.git

Nadat u de broncode hebt gekloond, navigeert u naar de projectdirectory en installeert u de vereiste afhankelijkheden.

cd AngularJS_Firebase_Part7 npm installeren

Zodra de afhankelijkheden zijn geïnstalleerd, start u de server.

npm start

Wijs je browser naar http: // localhost: 8000 / app / # / home en je zou de applicatie moeten laten draaien.

Implementeren van de uitlogfunctionaliteit

De afmeldknop toevoegen

We beginnen met het toevoegen van de uitlogknop aan de addPost.html en welcome.html keer bekeken. Open beide pagina's en voeg een nieuw ankertag toe aan het nav-element. 

Uitloggen implementeren

Wanneer we een bepaalde gebruiker willen loggen, kunnen we de $ Onbevoegde firebase API. We zullen een methode maken in onze CommonProp AngularJS-service, zodat deze beschikbaar is voor alle controllers. Open home.js en wijzig de CommonProp service om een ​​nieuwe functie op te nemen met de naam logoutUser.

logoutUser: function () // logout the user

Nu binnen de logoutUser functie, gebruik de loginObj om het te maken $ Onbevoegde API-oproep en omleiden naar de startpagina. Dit is het aangepaste CommonProp service.

.service ('CommonProp', ['$ location', '$ firebaseAuth', function ($ location, $ firebaseAuth) var user = "; var firebaseObj = nieuwe Firebase (" https: //blistering-heat-2473.firebaseio. com "); var loginObj = $ firebaseAuth (firebaseObj); return getUser: function () return user;, setUser: function (value) user = value;, logoutUser: function () loginObj. $ unauth ( ); console.log ('done logout'); $ location.path ('/ home');;])

In de AddPostCtrl en WelcomeCtrl controllers, voeg een functie toe met de naam uitloggen die de uitlogvraag naar de CommonProp service.

$ scope.logout = function () CommonProp.logoutUser (); 

Sla de bovenstaande wijzigingen op en log in met een geldig e-mailadres en wachtwoord. Nadat u bent ingelogd, zou u de Uitloggen link in het bovenste menu. Klik op de Uitloggen link moet u uitloggen van de applicatie.

Paginagegevens onderhouden bij Vernieuwen

Tot nu toe ziet alles er goed uit en werkt het goed. Maar nadat u zich bij de toepassing hebt aangemeld, als u de pagina probeert te verversen, raakt alles in de war. We moeten dus een manier vinden om de paginagegevens te behouden. We zullen gebruik maken van HTML 5 lokale opslag om belangrijke gegevens te ondersteunen. 

Nadat de gebruiker zich heeft aangemeld, houden we het e-mailadres in de lokale opslag. Wijzig de setUser functie in de CommonProp dienst om het e-mailadres van de gebruiker op te slaan in lokale opslag.

setUser: function (value) localStorage.setItem ("userEmail", waarde); gebruiker = waarde; 

Nu, terwijl het e-mailadres van de gebruiker wordt opgehaald van de CommonProp service, haalt het e-mailadres uit de lokale opslag en komt het terug.

getUser: function () if (user == ") user = localStorage.getItem ('userEmail'); teruggebruiker;

Zorg er ook voor dat u de lokale opslaggegevens en de gebruikersvariabele verwijdert uit de CommonProp dienst wanneer de gebruiker uitlogt.

logoutUser: function () loginObj. $ unauth (); user = "; localStorage.removeItem ('userEmail'); $ location.path ('/ home');

Sla de bovenstaande wijzigingen op en log in met een geldig e-mailadres en wachtwoord. Probeer de pagina opnieuw in te stellen en de pagina werkt zoals verwacht.

Ongeautoriseerde paginatoegang voorkomen

Op dit moment hebben gebruikers toegang tot alle pagina's, ongeacht of ze zijn aangemeld of niet. Om ongeautoriseerde toegang te voorkomen, controleren we de gebruikerssessie.

In de WelcomeCtrl controller, voeg de volgende code toe om de huidige aangemelde gebruiker te krijgen. Als de gebruiker niet bestaat, stuurt u de gebruiker door naar de startpagina.

$ scope.username = CommonProp.getUser (); if (! $ scope.username) $ location.path ('/ home'); 

Voeg op dezelfde manier de volgende code toe aan de AddPostCtrl controleur.

if (! CommonProp.getUser ()) $ location.path ('/ home'); 

Sla de bovenstaande wijzigingen op en probeer de welkomstpagina of de pagina Bericht toevoegen te laden zonder u aan te melden en u moet worden omgeleid naar de inlogpagina. 

Gebruiker automatisch aanmelden bij geldige sessie

We voegen nog een functie toe om automatisch in te loggen bij de gebruiker op de inlogpagina. We zullen gebruik maken van de $ onAuth API die luistert naar wijzigingen in de authenticatietoestand. Wanneer de gebruiker de inlogpagina laadt en een authenticatietoestand optreedt als gevolg van een geldige sessie, $ onAuth zal worden ontslagen. Voeg de toe $ onAuth API-oproep in de HomeCtrl controleur.

loginObj. $ onAuth (function (authData) // fire when authentication state happens);

Als het authData is niet leeg in de geretourneerde callback, dan is het een geldige sessie. Voeg dus de code toe om de gebruikersgegevens in de CommonProp-service op te slaan en door te sturen naar de welkomstpagina.

loginObj. $ onAuth (function (authData) if (authData) CommonProp.setUser (authData.password.email); $ location.path ('/ welcome'););

Sla de bovenstaande wijzigingen op en log in bij de app. Na het inloggen sluit u de applicatie zonder uit te loggen. Probeer nu de aanmeldingspagina te laden en u moet automatisch zijn aangemeld bij de app.

Inpakken

In dit deel van de serie hebben we de uitlogfunctie geïmplementeerd en ook een aantal problemen opgelost, zoals het voorkomen van ongeautoriseerde gebruikerstoegang en het bijhouden van gegevens bij het vernieuwen van pagina's. 

In de komende tutorials zal ik proberen een aantal functies te implementeren die door gebruikers zijn aangevraagd. Ik verwelkom alle functieverzoeken die je zou willen dat ik implementeer.

Pas op voor de komende tutorial door mijn instructeurspagina te controleren. Het bevat alle tutorials zodra ze zijn gepubliceerd.

Laat ons uw mening, suggesties en correcties weten in de opmerkingen hieronder. Broncode van deze tutorial is beschikbaar op GitHub.