Opprette en webapp fra grunnen ved hjelp av AngularJS og Firebase Del 8

I den forrige delen av denne opplæringsserien la vi lasteindikatoren til vår applikasjon for å gjøre den mer interaktiv. Vi så også hvordan du filtrerer dataresultatet mens du henter data fra brannbase. I denne delen av opplæringen legger vi til loggfunksjonaliteten og løser et par problemer.

Starter

La oss begynne med å klone den forrige delen av opplæringen fra GitHub.

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

Etter kloning av kildekoden, naviger til prosjektkatalogen og installer de nødvendige avhengighetene.

cd AngularJS_Firebase_Part7 npm installere

Når avhengighetene er installert, start serveren.

npm start

Pek nettleseren din til http: // localhost: 8000 / app / # / home, og du bør ha programmet kjørt.

Implementere logoutfunksjonaliteten

Legge til Logout-knappen

Vi starter med å legge til logout-knappen til addPost.html og velkommen.html utsikt. Åpne begge sidene og legg til en ny ankermerke til nav-elementet. 

Implementering Logout

Når vi ønsker å logge en bestemt bruker ut, kan vi ringe til $ UNAUTH firebase API. Vi lager en metode i vår CommonProp AngularJS-tjenesten slik at den er tilgjengelig på tvers av kontrollerne. Åpen home.js og endre CommonProp tjeneste for å inkludere en ny funksjon som kalles logoutUser.

logoutUser: funksjon () // logg ut brukeren

Nå inne i logoutUser funksjon, bruk loginObj å gjøre $ UNAUTH API-anrop og omdirigere til hjemmesiden. Her er den endrede CommonProp service.

.tjeneste ('CommonProp', ['$ location', '$ firebaseAuth', funksjon ($ plassering, $ firebaseAuth) var user = "; var firebaseObj = new Firebase (" https: //blistering-heat-2473.firebaseio. com)); var loginObj = $ firebaseAuth (firebaseObj); return getUser: function () retur bruker;, setUser: funksjon (verdi) user = value;, logoutUser: function () loginObj. $ unauth ); console.log ('ferdig logout'); $ location.path ('/ home');;])

AddPostCtrl og WelcomeCtrl kontrollere, legg til en funksjon som kalles Logg ut som vil gjøre logout-anropet til CommonProp service.

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

Lagre endringene ovenfor og logg inn med en gyldig e-postadresse og passord. Når du er logget på, bør du kunne se Logg ut lenke i toppmenyen. Klikk på Logg ut lenke skal logge deg ut av programmet.

Vedlikehold av sidedata på Oppdatering

Til nå ser alt bra ut og fungerer bra. Men etter at du har logget på programmet, blir du oppgradert hvis du prøver å oppdatere siden. Så, vi må finne en måte å opprettholde sidedataene på. Vi skal bruke HTML 5 lokal lagring for å opprettholde viktige data. 

Når brukeren har logget på, vil vi beholde e-postadressen i lokal lagring. Endre setUser fungere i CommonProp tjeneste for å lagre brukerens e-postadresse i lokal lagring.

setUser: funksjon (verdi) localStorage.setItem ("userEmail", verdi); bruker = verdi; 

Nå, mens du får brukerens e-postadresse fra CommonProp tjenesten, vil den hente e-postadressen fra lokal lagring og returnere.

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

Pass også på å fjerne lokale lagringsdata og brukervariabelen fra CommonProp service når brukeren logger ut.

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

Lagre endringene ovenfor og logg inn med en gyldig e-postadresse og passord. Når du er logget på, prøv å oppdatere siden, og siden skal fungere som forventet.

Forhindre uautorisert sidetilgang

Nå kan brukere få tilgang til alle sidene, uavhengig av om de er logget inn eller ikke. For å forhindre uautorisert tilgang kontrollerer vi etter brukersesjon.

WelcomeCtrl kontroller, legg til følgende kode for å få den nåværende innloggede brukeren. Hvis brukeren ikke eksisterer, omdirigerer brukeren til startsiden.

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

Tilsvarende legg til følgende kodekontroll til AddPostCtrl kontrolleren.

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

Lagre endringene ovenfor, og prøv å laste velkomstsiden eller siden Legg til innlegg uten å logge inn, og du bør omdirigeres til påloggingssiden. 

Automatisk Logg inn Bruker på gyldig sesjon

Vi legger til en ekstra funksjon for å logge automatisk på brukeren når du er på påloggingssiden. Vi vil gjøre bruk av $ onAuth API som vil lytte etter endringer i autentiseringsstatus. Når brukeren laster innloggingssiden, og det oppstår en godkjenningsstatus på grunn av en gyldig økt, $ onAuth vil bli sparket. Legg til $ onAuth API-anrop i HomeCtrl kontrolleren.

loginObj. $ onAuth (funksjon (authData) // brann når autentiseringsstatus oppstår);

Hvis authData er ikke null i den returnerte tilbakeringingen, så er det en gyldig økt. Så legg til koden for å lagre brukerdetaljer i CommonProp-tjenesten og omdirigere til velkomstsiden.

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

Lagre endringene ovenfor og logg inn på programmet. Når du er logget på, lukk programmet uten å logge ut. Prøv nå å laste inn påloggingssiden, og du bør automatisk logges inn i programmet.

Pakke det opp

I denne delen av serien implementerte vi loggingsfunksjonaliteten og sorterte også ut noen av problemene som å forhindre uautorisert brukertilgang og vedlikeholde data på sideoppdatering. 

I de kommende opplæringsprogrammene vil jeg prøve å implementere noen få funksjoner som forespurt av brukere. Jeg ønsker velkommen alle funksjonsforespørsler som du vil at jeg skal implementere.

Se opp for den kommende opplæringen ved å sjekke min instruktørside. Den inneholder alle opplæringsprogrammer så snart de er publisert.

Gi oss beskjed om dine tanker, forslag og rettelser i kommentarene nedenfor. Kildekode fra denne opplæringen er tilgjengelig på GitHub.