Een webapp maken vanuit kras met AngularJS en Firebase deel 3

In het vorige deel van deze serie hebben we de aanmeldingspagina gemaakt, de routes opgezet en ook enkele formuliervalidaties gedaan met AngularJS. In deze zelfstudie zullen we de aanmeldingsfunctionaliteit implementeren door AngularJS en de nieuwste versie van Firebase te bedraden. We zullen ook de inlogcode wijzigen volgens de nieuwere Firebase API.

Ermee beginnen

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

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

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

cd AngularJS_Firebase_Part2 npm installeren

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

npm start

Richt uw browser op http: // localhost: 8000 / app / en laat de applicatie draaien.

Firebase-scriptverwijzingen

Firebase heeft onlangs een nieuwere versie uitgebracht en de FirebaseSimpleLogin-client die we in onze eerste zelfstudie hebben gebruikt om de gebruiker aan te melden, is verouderd en opgenomen in de Firebase-bibliotheek. Dus open app / index.html en verwijder de bestaande Firebase-referenties en voeg de volgende scriptreferenties toe:

 

Aanpassing van aanmelding wijzigen

Navigeren naar app / home en open home.js. Verwijder de geïnjecteerde $ simplefirebaselogin van de controller en injecteer $ firebaseAuth. Gebruik het om het te maken loginObj zoals getoond.

.controller ('HomeCtrl', ['$ scope', '$ firebaseAuth', functie ($ scope, $ firebaseAuth) var firebaseObj = nieuwe Firebase ("https://blistering-heat-2473.firebaseio.com"); var loginObj = $ firebaseAuth (firebaseObj);));

De nieuwe Firebase biedt een API-methode genaamd $ authWithPassword om te authenticeren met behulp van e-mailadres en wachtwoord. Vervang de aanmeldmethode door $ authWithPassword in de Aanmelden functie zoals getoond:

$ scope.SignIn = functie (e) e.preventDefault (); var gebruikersnaam = $ scope.user.email; var wachtwoord = $ scope.user.password; loginObj. $ authWithPassword (email: gebruikersnaam, wachtwoord: wachtwoord) .then (functie (gebruiker) // terugroepactie console.log ('Authentication successful');, function (error) // Failure callback console. log ('Verificatiefout');); 

Sla de wijzigingen op, start de server opnieuw en probeer in te loggen met een geldig e-mailadres en wachtwoord. U zou een succesbericht moeten hebben in de browser console.

Implementatie van sign-upfunctionaliteit

We zullen de Firebase createUser-methode gebruiken om een ​​nieuwe gebruiker te maken met een e-mailadres en wachtwoord. Aangezien we de gegevens in onze vorige zelfstudie al hebben gevalideerd, binden we een aanmeldingsfunctieoproep met een klik op de knop Registreren. Voeg de ngClick-richtlijn toe aan de registerknop, zoals weergegeven:

Doe open register.js en in de RegisterCtrl controller, maak een nieuwe functie genaamd inschrijven

.controller ('RegisterCtrl', ['$ scope', function ($ scope) $ scope.signUp = function () // Aanmelden implementatie zou hier zijn !!;]);

In de inschrijven functie zullen we gewoon controleren of ons formulier geldig is:

$ scope.signUp = function () if (! $ scope.regForm. $ invalid) console.log ('Geldige formulierinzending'); ;

Voeg de toe ngController richtlijn voor de lichaam tag in register.html.

Start de server opnieuw op en probeer naar de registratiepagina te bladeren. druk de Registreren knop na het invoeren van het e-mailadres en wachtwoord. Als u nu de browserconsole aanvinkt, zou u de Geldige formulierinzending bericht.

Voordat we de Firebase API kunnen gebruiken om een ​​nieuwe gebruiker te maken, moeten we dus injecteren firebase in onze applicatie. Doe open register.js en voeg de firebase module.

angular.module ('myApp.register', ['ngRoute', 'firebase'])

Vervolgens moeten we ook de $ firebaseAuth in onze registercontroller.

.controller ('RegisterCtrl', ['$ scope', '$ firebaseAuth', functie ($ scope, $ firebaseAuth) 

Met onze Firebase-URL maken we een Firebase-instantie en met die Firebase-instantie maken we een $ firebaseAuth voorwerp. We zullen dit gebruiken $ firebaseAuth object om onze API-aanroep te doen. Voeg de volgende code toe in register.js, in de registercontroller.

var firebaseObj = nieuwe Firebase ("https://blistering-heat-2473.firebaseio.com"); var auth = $ firebaseAuth (firebaseObj);

We krijgen nu het e-mailadres en wachtwoord van $ scope en bel de createuser Firebase-methode. Dit is het aangepaste inschrijven methode.

$ scope.signUp = function () if (! $ scope.regForm. $ invalid) var email = $ scope.user.email; var wachtwoord = $ scope.user.password; if (email && password) auth. $ createUser (email, password) .then (function () // do things if success console.log ('User creation success');, function (error) // do dingen als fout console.log (fout);); ;

Zoals je hierboven kunt zien inschrijven functie, hebben we de $ createuser methode om een ​​nieuwe gebruiker te maken. Bij het maken van succesvolle gebruikers, loggen we het succesbericht in de succes callback van de createuser functie. 

Start de server opnieuw op en wijs uw browser naar http: // localhost: 8000 / app / # / register en probeer u te registreren voor een nieuw gebruikersaccount met een e-mailadres en wachtwoord. Controleer uw browserconsole nadat de gebruikersregistratieknop klikt. Als dit lukt, moet u het succesbericht van de gebruiker maken in de browserconsole. 

Wijs vervolgens uw browser naar http: // localhost: 8000 / app / # / home en probeer in te loggen met de nieuwe gebruikersreferenties.

Gebruik van callbacks voor gebruikersregistratie

Terugbellen door gebruikersucces maken

Wanneer een gebruikersregistratie succesvol is, moeten we de gebruiker omleiden naar de inlogpagina. Om de gebruiker door te sturen, moeten we de $ locatie AngularJS-service in onze controller injecteren. Dus injecteer $ locatie zoals getoond:

.controller ('RegisterCtrl', ['$ scope', '$ location', '$ firebaseAuth', functie ($ scope, $ location, $ firebaseAuth) 

Voeg de volgende code toe aan de succes-callback van de auth. $ createuser functie om de gebruiker om te leiden naar de inlogpagina bij succesvolle gebruikersregistratie.

$ Location.path ( '/ home');

Sla de wijzigingen op, start de server opnieuw en probeer u te registreren voor een ander gebruikersaccount. Na succesvolle gebruikersregistratie moet u worden omgeleid naar de inlogpagina.

Gebruikersfaillissement callback creëren

Gebruikersregistraties kunnen mislukken vanwege een aantal problemen, bijvoorbeeld als het e-mailadres van de gebruiker al bestaat. Dus als er een fout optreedt tijdens de gebruikersregistratie, moeten we dit aan de gebruiker laten zien. We voegen een ander foutbericht toe onder het wachtwoordveld en instellen dat het wordt weergegeven als er een fout optreedt. Hier is de foutmelding:

RegErrorMessage

Zoals te zien in de bovenstaande code, hebben we de ngShow richtlijn om de bovenstaande foutmelding weer te geven wanneer regError is waar. Het bericht wordt weergegeven met behulp van de $ scope veranderlijk regErrorMessage. In de createuser mislukte callback, voeg de volgende code toe om het foutbericht weer te geven.

$ scope.regError = true; $ scope.regErrorMessage = error.message;

Dit is het aangepaste inschrijven functie:

$ scope.signUp = function () if (! $ scope.regForm. $ invalid) var email = $ scope.user.email; var wachtwoord = $ scope.user.password; if (email && password) auth. $ createUser (email, password) .then (function () // do things if success console.log ('Succes van gebruikerscreatie'); $ location.path ('/ home') ;, functie (fout) // dingen doen als fout console.log (error); $ scope.regError = true; $ scope.regErrorMessage = error.message;); ;

Sla de wijzigingen op, start de server opnieuw en probeer te registreren met een e-mailadres en wachtwoord dat u al hebt gebruikt. Wanneer u dit doet, zou er een foutmelding op het scherm moeten verschijnen zoals getoond:

Het beginscherm maken

Wanneer een gebruiker zich met succes aanmeldt bij de toepassing, leiden we de gebruiker door naar de startpagina. Op de startpagina worden de berichten weergegeven die door de gebruiker zijn gemaakt en er is ook een optie om nieuwe berichten te maken. Dus laten we de startpagina maken.

Navigeer naar de app-map in de toepassingsmap en maak een nieuwe map met de naam Welkom. Deze map bevat sjablonen en bestanden met betrekking tot de startpagina. Binnen in de Welkom map, maak pagina's genaamd welcome.html en welcome.js. Voeg de volgende code toe aan welcome.html.

     AngularJS & Firebase Web App     

AngularJS & Firebase-app

Welkom thuis !!

Binnen welcome.js we zullen de routes voor de applicatie naar de welkomstpagina definiëren. We zullen gebruiken $ routeProvider om een ​​route te maken voor de Welkom uitzicht. Wanneer u een nieuwe route definieert, stellen we een templateUrl welke zou worden gerenderd in de index.html. Samen met dat zullen we ook een instellen controleur (een controller is een logica die een bepaalde weergave bestuurt) voor de nieuw gecreëerde $ scope van de welkomstweergave. Dit is wat welcome.js eindelijk ziet eruit als:

'gebruik strikt'; angular.module ('myApp.welcome', ['ngRoute']) .config (['$ routeProvider', function ($ routeProvider) $ routeProvider.when ('/ welcome', templateUrl: 'welcome / welcome.html ', controller:' WelcomeCtrl ');]) .controller (' WelcomeCtrl ', [' $ scope ', function ($ scope) ]);

Nu, open app / app.js en neem de nieuw toegevoegde module op.

angular.module ('myApp', ['ngRoute', 'myApp.home', 'myApp.register', 'myApp.welcome' // Nieuw toegevoegde module])

Open ook app / index.html en voeg de nieuw toegevoegde toe register.js script.

Wanneer een gebruiker zich succesvol aanmeldt, leiden we de gebruiker door naar de welkomstpagina. Doe open app / home / home.js en injecteer de $ locatie in de HomeCtrl

.controller ('HomeCtrl', ['$ scope', '$ location', '$ firebaseAuth', function ($ scope, $ location, $ firebaseAuth) 

We zullen gebruiken $ locatie om de gebruiker door te sturen naar de welkomstpagina. In home.js, binnen in de Aanmelden functie, voeg bij succesvol terugbellen de volgende code toe:

$ Location.path ( '/ welcome');

Sla de wijzigingen op, start de server opnieuw op en probeer in te loggen bij de app. Na een succesvolle aanmelding zou u een scherm moeten kunnen zien zoals hieronder getoond:

Toegang tot $ scope tussen controllers 

Laten we nu de e-mail van de ingelogde gebruiker weergeven op de welkomstpagina. Maar er is een probleem. Tijdens het inloggen hebben we het gebruikersdetail in de HomeCtrl, maar wanneer we doorverwijzen naar welkomstweergave, de $ scope van HomeCtrl is niet toegankelijk binnen de WelcomeCtrl. Dus om dit mogelijk te maken, maken we gebruik van AngularJS-services.

Hoekservices zijn substitueerbare objecten die aan elkaar zijn geschakeld met afhankelijkheidsinjectie (DI). U kunt services gebruiken om code te organiseren en te delen in uw app.

Met behulp van services kunnen we gegevens delen tussen verschillende controllers. Dus in home.js we maken onze service genaamd CommonProp.

.service ('CommonProp', functie () var user = "; return getUser: function () return user;, setUser: function (value) user = value;;);

In de CommonProp service hebben we een variabele gemaakt met de naam user, waarbij we de e-mail van de ingelogde gebruiker instellen. Omdat de service toegankelijk is vanaf alle controllers, is het mogelijk om gegevens te delen tussen controllers die de service gebruiken CommonProp.

Injecteer de service CommonProp in de HomeCtrl zoals getoond:

.controller ('HomeCtrl', ['$ scope', '$ location', 'CommonProp', '$ firebaseAuth', functie ($ scope, $ location, CommonProp, $ firebaseAuth) 

Na succesvolle gebruikersauthenticatie stelt u de gebruiker variabele in CommonProp dienst zoals getoond.

CommonProp.setUser (user.password.email);

Injecteer ook de CommonProp service in de WelcomeCtrl in welcome.js.

.controller ('WelcomeCtrl', ['$ scope', 'CommonProp', function ($ scope, CommonProp) 

In welcome.html pas het welkomstbericht aan met een $ scope variabele zoals getoond.

Welkom thuis Gebruikersnaam !!

Nu in de WelcomeCtrl stel de waarde in van de $ scope.username van CommonProp Diensten getUser methode.

$ scope.username = CommonProp.getUser ();

Sla alle wijzigingen op, start uw browser opnieuw en probeer in te loggen met elk e-mailadres en wachtwoord. Na succesvolle aanmelding zou u uw e-mailadres op de welkomstpagina moeten zien.

Inpakken

In deze zelfstudie hebben we onze zelfstudie voor het ontwikkelen van blogtoepassingen met AngularJS en Firebase naar het volgende niveau gebracht. We implementeerden de aanmeldfunctionaliteit en zagen ook hoe gegevens tussen twee controllers konden worden gedeeld.

In het volgende deel van deze serie zullen we zien hoe u kunt beginnen met het implementeren van de pagina "Blogpost maken". 

De broncode van deze tutorial is beschikbaar in GitHub.

Laat het ons weten in de reacties hieronder!