{"id":7184,"date":"2018-03-18T18:21:27","date_gmt":"2018-03-18T16:21:27","guid":{"rendered":"https:\/\/www.tomislavstankovic.com\/blog\/?p=7184"},"modified":"2019-01-05T19:49:43","modified_gmt":"2019-01-05T17:49:43","slug":"angular-firebase-registracija-prijava","status":"publish","type":"post","link":"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/","title":{"rendered":"Angular &#038; Firebase &#8211; registracija i prijava"},"content":{"rendered":"<p>U ovom \u0107u blog postu napraviti primjer <em>Angular<\/em> web aplikacije koja \u0107e se sastojati od nekoliko ekrana. Glavna svrha ove web aplikacije je omogu\u0107iti korisnicima da se registriraju tj. prijave kako bi ju mogli koristiti. To \u0107e mo\u0107i u\u010diniti koriste\u0107i <em>e-mail<\/em>, <em>Google<\/em> ili <em>Facebook<\/em> korisni\u010dki ra\u010dun. <\/p>\n<p>Nekoliko sam <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-google-login-prijava\/\" rel=\"noopener\" target=\"_blank\">blog<\/a> <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-facebook-prijava-login\/\" rel=\"noopener\" target=\"_blank\">postova<\/a> ve\u0107 <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-firebase-registracija-prijava\/\" rel=\"noopener\" target=\"_blank\">objavio<\/a> na ovu temu, ali svi su bili vezani uz <em><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-framework-resursi\/\" rel=\"noopener\" target=\"_blank\">Ionic Framework<\/a><\/em>. Iako je <em>Ionic<\/em> temeljen na <em>Angularu<\/em> shva\u0107am da osobama koje se tek susre\u0107u sa ovim mo\u017ee biti te\u017ee napraviti <em>Angular<\/em> projekt prou\u010davaju\u0107i <em>Ionic<\/em> <a href=\"https:\/\/gist.github.com\/zenorocha\/9282426622fc8f46a6caeff40008de75\" rel=\"noopener\" target=\"_blank\">sintaksu<\/a>. Zato ovaj put radim \u010disti <em>Angular<\/em> web projekt.<\/p>\n<h2>Postavljanje Firebase projekta<\/h2>\n<p>Na adresi <a href=\"https:\/\/console.firebase.google.com\/\" rel=\"noopener\" target=\"_blank\">https:\/\/console.firebase.google.com\/<\/a> kreiram novi <em>Firebase<\/em> projekt pod nazivom &#8216;AngularWebFirebase&#8217;.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-1-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-1-min.png\" alt=\"Angular &amp; Firebase \u2013 registracija i prijava\" width=\"967\" height=\"719\" class=\"aligncenter size-full wp-image-7188\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-1-min.png 967w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-1-min-300x223.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-1-min-768x571.png 768w\" sizes=\"auto, (max-width: 967px) 100vw, 967px\" \/><\/a><\/p>\n<p>Na sljede\u0107em ekranu, klikom na &#8216;<em>Add Firebase to your web app<\/em>&#8216; dobijem objekt koji \u0107e mi biti potreban kako bi sve funkcioniralo. Taj \u0107u objekt kasnije ugraditi unutar <strong>app.module.ts<\/strong> datoteke.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-2-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-2-min.png\" alt=\"Angular &amp; Firebase \u2013 registracija i prijava\" width=\"801\" height=\"554\" class=\"aligncenter size-full wp-image-7193\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-2-min.png 801w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-2-min-300x207.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-2-min-768x531.png 768w\" sizes=\"auto, (max-width: 801px) 100vw, 801px\" \/><\/a><\/p>\n<p>Nakon postavljanja projekta u izborniku <em>Authentication<\/em> odabirem <em>Email\/Password<\/em>, <em>Facebook<\/em> i <em>Google<\/em> metodu registracije\/prijave.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-3.png\" alt=\"Angular &amp; Firebase \u2013 registracija i prijava\" width=\"1251\" height=\"942\" class=\"aligncenter size-full wp-image-7196\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-3.png 1251w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-3-300x226.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-3-768x578.png 768w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-3-1024x771.png 1024w\" sizes=\"auto, (max-width: 1251px) 100vw, 1251px\" \/><\/a><\/p>\n<p>Kao \u0161to se mo\u017ee vidjeti iz slike iznad, <em>Facebook<\/em> prijava ne mo\u017ee se ugraditi bez dva parametra koja je mogu\u0107e dobiti jedino na adresi <a href=\"https:\/\/developers.facebook.com\/\" rel=\"noopener\" target=\"_blank\">https:\/\/developers.facebook.com\/<\/a> gdje je potrebno kreirati profil za <em>AngularWebFirebase<\/em> aplikaciju.<\/p>\n<h2>Implementacija Firebase u Angular<\/h2>\n<p>Koriste\u0107i <em>Angular CLI<\/em> <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/uvod-angular-cli\/\" rel=\"noopener\" target=\"_blank\">kreiram novi projekt<\/a>.<\/p>\n<pre class=\"lang:sh decode:true\">$ ng new AngularWebFirebase\r\n$ cd AngularWebFirebase<\/pre>\n<p>Sljede\u0107om naredbom instaliram potreban <em>NPM<\/em> paket<\/p>\n<pre class=\"lang:sh decode:true\">$ npm install angularfire2 firebase --save<\/pre>\n<p>Tako\u0111er, kao \u0161to sam ranije ve\u0107 spomenuo, u datoteku <strong>app.module.ts<\/strong> postavljam potreban <em>Firebase<\/em> objekt.<\/p>\n<pre class=\"lang:js mark:3,4,7-8,10-17,25-28 decode:true \" title=\"app.module.ts\" >import { BrowserModule } from '@angular\/platform-browser';\r\nimport { NgModule } from '@angular\/core';\r\nimport { FormsModule } from '@angular\/forms';\r\nimport { HttpModule } from '@angular\/http';\r\n\r\nimport { AppComponent } from '.\/app.component';\r\nimport { AngularFireModule } from 'angularfire2';\r\nimport { AngularFireAuthModule } from 'angularfire2\/auth';\r\n\r\nexport const firebaseConfig = {\r\n  apiKey: \"***************************************\",\r\n  authDomain: \"***********************.firebaseapp.com\",\r\n  databaseURL: \"https:\/\/***********************.firebaseio.com\",\r\n  projectId: \"***********************\",\r\n  storageBucket: \"***********************.appspot.com\",\r\n  messagingSenderId: \"************\"\r\n};\r\n\r\n@NgModule({\r\n  declarations: [\r\n    AppComponent\r\n  ],\r\n  imports: [\r\n    BrowserModule,\r\n    FormsModule,\r\n    HttpModule,\r\n    AngularFireModule.initializeApp(firebaseConfig),\r\n    AngularFireAuthModule \r\n  ],\r\n  providers: [],\r\n  bootstrap: [AppComponent]\r\n})\r\nexport class AppModule { }<\/pre>\n<p>Sada \u0107u kreirati \u010detiri komponente od kojih \u0107e se sastojati moja <em>Angular<\/em> web aplikacija:<\/p>\n<p>1 &#8211; <em>LoginComponent<\/em> &#8211; stranica za prijavu koriste\u0107i <em>Facebook<\/em> ili <em>Google<\/em><br \/>\n2 &#8211; <em>EmailComponent<\/em> &#8211; stranica za prijavu koriste\u0107i e-mail<br \/>\n3 &#8211; <em>SignupComponent<\/em> &#8211; stranica za registraciju<br \/>\n4 &#8211; <em>DashboardComponent<\/em> &#8211; po\u010detna stranica nakon uspje\u0161ne prijave<\/p>\n<pre class=\"lang:sh decode:true\">$ ng generate component login\r\n$ ng generate component email\r\n$ ng generate component signup\r\n$ ng generate component dashboard<\/pre>\n<p>Ako sada pokrenem aplikaciju naredbom <span class=\"lang:sh decode:true  crayon-inline\">$ ng serve<\/span> na adresi <em>http:\/\/localhost:4200\/<\/em> mogu vidjeti jedino standardnu <em>Angular<\/em> po\u010detnu stranicu. <\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/10\/Angular-Demo-CLI-projekt-localhost.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/10\/Angular-Demo-CLI-projekt-localhost.png\" alt=\"Angular Demo CLI projekt localhost\" width=\"1448\" height=\"804\" class=\"aligncenter size-full wp-image-6225\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/10\/Angular-Demo-CLI-projekt-localhost.png 1448w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/10\/Angular-Demo-CLI-projekt-localhost-300x167.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/10\/Angular-Demo-CLI-projekt-localhost-768x426.png 768w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/10\/Angular-Demo-CLI-projekt-localhost-1024x569.png 1024w\" sizes=\"auto, (max-width: 1448px) 100vw, 1448px\" \/><\/a><\/p>\n<p>S obzirom da ja u ovom slu\u010daju \u017eelim vidjeti svoju <em>Login<\/em> komponentu kao po\u010detnu stranicu moram napraviti sljede\u0107e. Unutar <strong>\/src\/app\/<\/strong> kreiram datoteku <strong>app.routes.ts<\/strong> sa sljede\u0107im sadr\u017eajem:<\/p>\n<pre class=\"lang:js decode:true   \" title=\"app.routes.ts\" >import { ModuleWithProviders } from '@angular\/core';\r\nimport { Routes, RouterModule } from '@angular\/router';\r\n\r\nimport { AppComponent } from '.\/app.component';\r\nimport { LoginComponent } from '.\/login\/login.component';\r\nimport { DashboardComponent } from '.\/dashboard\/dashboard.component';\r\nimport { SignupComponent } from '.\/signup\/signup.component';\r\nimport { EmailComponent } from '.\/email\/email.component';\r\n\r\nexport const router: Routes = [\r\n    { path: '', redirectTo: 'login', pathMatch: 'full' },\r\n    { path: 'login', component: LoginComponent },\r\n    { path: 'signup', component: SignupComponent },\r\n    { path: 'email', component: EmailComponent },\r\n    { path: 'dashboard', component: DashboardComponent}\r\n]\r\n\r\nexport const routes: ModuleWithProviders = RouterModule.forRoot(router);<\/pre>\n<p>Naravno, tu jo\u0161 ide uvoz u <strong>app.module.ts<\/strong><\/p>\n<pre class=\"lang:js  mark:7,22 decode:true\" title=\"app.module.ts\">\r\nimport { AngularFireModule } from 'angularfire2';\r\nimport { AngularFireAuthModule } from 'angularfire2\/auth';\r\nimport { LoginComponent } from '.\/login\/login.component';\r\nimport { EmailComponent } from '.\/email\/email.component';\r\nimport { SignupComponent } from '.\/signup\/signup.component';\r\nimport { DashboardComponent } from '.\/dashboard\/dashboard.component';\r\nimport { routes } from '.\/app.routes';\r\n...\r\ndeclarations: [\r\n    AppComponent,\r\n    LoginComponent,\r\n    EmailComponent,\r\n    SignupComponent,\r\n    DashboardComponent\r\n  ],\r\nimports: [\r\n    BrowserModule,\r\n    FormsModule,\r\n    HttpModule,\r\n    AngularFireModule.initializeApp(firebaseConfig),\r\n    AngularFireAuthModule,\r\n    routes\r\n  ],\r\n...<\/pre>\n<p>I nakon toga unutar datoteke <strong>app.component.html<\/strong> umjesto postoje\u0107eg sadr\u017eaja staviti <span class=\"lang:xhtml decode:true crayon-inline\">&lt;router-outlet&gt;&lt;\/router-outlet&gt;<\/span>.<\/p>\n<h3>Login komponenta<\/h3>\n<p>Nalazi se na adresi <em>http:\/\/localhost:4200\/login<\/em> i to je zadani pregled koji se pojavi prilikom prve posjete web aplikaciji. <\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-6-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-6-min.png\" alt=\"Angular &amp; Firebase \u2013 registracija i prijava\" width=\"826\" height=\"742\" class=\"aligncenter size-full wp-image-7218\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-6-min.png 826w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-6-min-300x269.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-6-min-768x690.png 768w\" sizes=\"auto, (max-width: 826px) 100vw, 826px\" \/><\/a><\/p>\n<p>Ekran se sastoji od tri gumba. <em>Facebook<\/em>, <em>Google<\/em> i <em>E-mail<\/em> prijava uz mogu\u0107nost registracije. <\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"login.component.html\" >&lt;div class=\"form-container\"&gt;\r\n  &lt;img src=\"assets\/images\/login.png\" id=\"login\"&gt;\r\n\r\n    &lt;span class=\"error\" *ngIf=\"error\"&gt;{{ error }}&lt;\/span&gt;\r\n\r\n  &lt;button (click)=\"loginFb()\" id=\"fb\"&gt;Login with Facebook&lt;\/button&gt;&lt;br&gt;\r\n  &lt;button (click)=\"loginGoogle()\" id=\"google\"&gt;Login with Google&lt;\/button&gt;\r\n  &lt;button routerLink=\"\/email\" id=\"email\"&gt;Login with E-mail&lt;\/button&gt;\r\n\r\n  &lt;a routerLink=\"\/signup\" routerLinkActive=\"active\" class=\"alc\"&gt;Don't have an account?&lt;\/a&gt;\r\n&lt;\/div&gt;<\/pre>\n<p>Gumb za prijavu putem <em>Facebooka<\/em> ili <em>Googlea<\/em> pozivaju funkciju dok klik ma gumb za prijavu putem <em>e-maila<\/em> otvara novu stranicu na kojoj se nalazi forma za unos <em>e-maila<\/em> i lozinke. <\/p>\n<p>Ako prijava putem <em>Facebooka<\/em> ili <em>Googlea<\/em> pro\u0111e zapisujem podatke o korisniku (<em>name<\/em>, <em>picture<\/em>, <em>email<\/em>) u <em><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Window\/localStorage\" rel=\"noopener\" target=\"_blank\">localStorage<\/a><\/em> kako bi ih kasnije mogao prikazati na <em>Dashboardu<\/em>.<\/p>\n<pre class=\"lang:js decode:true \" title=\"login.component.ts\" >import { Component, OnInit } from '@angular\/core';\r\n\r\nimport { AngularFireModule } from 'angularfire2';\r\nimport { AngularFireAuth } from 'angularfire2\/auth';\r\nimport * as firebase from 'firebase\/app';\r\nimport { Router } from '@angular\/router';\r\n\r\n@Component({\r\n  selector: 'app-login',\r\n  templateUrl: '.\/login.component.html',\r\n  styleUrls: ['.\/login.component.css']\r\n})\r\nexport class LoginComponent implements OnInit {\r\n\r\n  error: any;\r\n\r\n  constructor(public _angularAuth: AngularFireAuth, \r\n              private _router: Router) { }\r\n\r\n  ngOnInit() {\r\n  }\r\n\r\n  loginGoogle(){\r\n    let a = this;\r\n    \/\/this._angularAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider());\r\n    firebase.auth().signInWithPopup(new firebase.auth.GoogleAuthProvider())\r\n    .then(function(authData) {\r\n      console.log(authData);\r\n      if(authData.credential.accessToken){\r\n        localStorage.setItem('name', authData.additionalUserInfo.profile.name);\r\n        localStorage.setItem('picture', authData.additionalUserInfo.profile.picture);\r\n        localStorage.setItem('email', authData.additionalUserInfo.profile.email);\r\n        a._router.navigate(['\/dashboard']);\r\n      }\r\n    }).catch(function(error) {\r\n      console.log(error);\r\n      a.error = error.message;\r\n    });\r\n  }\r\n\r\n  loginFb(){\r\n    let a = this;\r\n    \/\/this._angularAuth.auth.signInWithPopup(new firebase.auth.FacebookAuthProvider());\r\n    firebase.auth().signInWithPopup(new firebase.auth.FacebookAuthProvider())\r\n    .then(function(authData) {\r\n      console.log(authData);\r\n      if(authData.credential.accessToken){\r\n        localStorage.setItem('name', authData.additionalUserInfo.profile.name);\r\n        localStorage.setItem('picture', authData.additionalUserInfo.profile.picture.data.url);\r\n        localStorage.setItem('email', authData.additionalUserInfo.profile.email);\r\n        a._router.navigate(['\/dashboard']);\r\n      }\r\n    }).catch(function(error) {\r\n      console.log(error);\r\n      a.error = error.message;\r\n    });\r\n  }\r\n\r\n}<\/pre>\n<p>Ovisno o postavkama unutar <em>Firebasea<\/em> jedan korisnik se (ne)mo\u017ee prijaviti koriste\u0107i istu <em>e-mail<\/em> adresu na razli\u010ditim dru\u0161tvenim mre\u017eama tj. ako se korisnik jednom prijavio koriste\u0107i <em>Google<\/em>, a kasnije se \u017eeli prijaviti koriste\u0107i <em>Facebook<\/em> dobiti \u0107e sljede\u0107u poruku:<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-5-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-5-min.png\" alt=\"Angular &amp; Firebase \u2013 registracija i prijava\" width=\"654\" height=\"762\" class=\"aligncenter size-full wp-image-7224\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-5-min.png 654w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-5-min-257x300.png 257w\" sizes=\"auto, (max-width: 654px) 100vw, 654px\" \/><\/a><\/p>\n<p>Ta se opcija mo\u017ee promijeniti klikom na &#8216;<em>One account per email address<\/em>&#8216;.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-4-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-4-min.png\" alt=\"Angular &amp; Firebase \u2013 registracija i prijava\" width=\"968\" height=\"958\" class=\"aligncenter size-full wp-image-7226\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-4-min.png 968w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-4-min-300x297.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-4-min-768x760.png 768w\" sizes=\"auto, (max-width: 968px) 100vw, 968px\" \/><\/a><\/p>\n<h3>Signup komponenta<\/h3>\n<p>Nalazi se na adresi <em>http:\/\/localhost:4200\/signup<\/em> i osnovna svrha ovog ekrana je omogu\u0107iti korisnicima registraciju. <\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-7-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-7-min.png\" alt=\"Angular &amp; Firebase \u2013 registracija i prijava\" width=\"533\" height=\"550\" class=\"aligncenter size-full wp-image-7229\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-7-min.png 533w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-7-min-291x300.png 291w\" sizes=\"auto, (max-width: 533px) 100vw, 533px\" \/><\/a><\/p>\n<p>Ekran se sastoji od dva polja za unos <em>e-maila<\/em> i lozinke.<\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"signup.component.html\" >&lt;div class=\"form-container\"&gt;\r\n  &lt;a routerLink=\"\/login\" id=\"goback\"&gt;Go back&lt;\/a&gt;\r\n\r\n  &lt;h2&gt;Registration&lt;\/h2&gt;\r\n\r\n  &lt;span class=\"error\" *ngIf=\"error\"&gt;{{ error }}&lt;\/span&gt;\r\n    \r\n  &lt;form #formData='ngForm' (ngSubmit)=\"onSubmit(formData)\"&gt;\r\n\r\n    &lt;input type=\"text\" placeholder=\"E-mail\" (ngModel)=\"email\" name=\"email\" class=\"txt\" required&gt;\r\n    &lt;input type=\"password\" placeholder=\"Password\" (ngModel)=\"password\" name=\"password\" class=\"txt\" required&gt;\r\n\r\n\r\n    &lt;button type=\"submit\" [disabled]=\"!formData.valid\" class=\"basic-btn\"&gt;Create my account&lt;\/button&gt;\r\n  &lt;\/form&gt;\r\n&lt;\/div&gt;<\/pre>\n<p>Ako registracija pro\u0111e u redu korisnik automatski bude preusmjeren na stranicu za prijavu. U suprotnom iznad polja za unos <em>e-maila<\/em> prikazuje se poruka o gre\u0161ci.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-8-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-8-min.png\" alt=\"Angular &amp; Firebase \u2013 registracija i prijava\" width=\"1034\" height=\"626\" class=\"aligncenter size-full wp-image-7232\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-8-min.png 1034w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-8-min-300x182.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-8-min-768x465.png 768w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-8-min-1024x620.png 1024w\" sizes=\"auto, (max-width: 1034px) 100vw, 1034px\" \/><\/a><\/p>\n<pre class=\"lang:js decode:true \" title=\"signup.component.ts\" >import { Component, OnInit } from '@angular\/core';\r\n\r\nimport { AngularFireModule } from 'angularfire2';\r\nimport { AngularFireAuth } from 'angularfire2\/auth';\r\nimport * as firebase from 'firebase\/app';\r\nimport { Router } from '@angular\/router';\r\n\r\n@Component({\r\n  selector: 'app-signup',\r\n  templateUrl: '.\/signup.component.html',\r\n  styleUrls: ['.\/signup.component.css']\r\n})\r\nexport class SignupComponent implements OnInit {\r\n\r\n  error: any;\r\n\r\n  constructor(public _angularAuth: AngularFireAuth, \r\n              private _router: Router) { }\r\n\r\n  ngOnInit() {\r\n  }\r\n\r\n  onSubmit(formData) {\r\n    let a = this;\r\n    if(formData.valid) {\r\n      console.log(formData.value);\r\n      firebase.auth().createUserWithEmailAndPassword(formData.value.email, formData.value.password)\r\n      .then(function(data) {\r\n        console.log(data);\r\n        if(data){\r\n          a._router.navigate(['\/email']);\r\n        }\r\n      }).catch(function(error) {\r\n        console.log(error);\r\n        a.error = error.message;\r\n      });\r\n    }\r\n  }\r\n\r\n}<\/pre>\n<h3>Email komponenta<\/h3>\n<p>Nalazi se na adresi <em>http:\/\/localhost:4200\/email<\/em> s osnovnom svrhom omogu\u0107avanja prijave korisnika pomo\u0107u <em>e-maila<\/em> i lozinke.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-9-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-9-min.png\" alt=\"Angular &amp; Firebase \u2013 registracija i prijava\" width=\"1034\" height=\"701\" class=\"aligncenter size-full wp-image-7234\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-9-min.png 1034w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-9-min-300x203.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-9-min-768x521.png 768w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-9-min-1024x694.png 1024w\" sizes=\"auto, (max-width: 1034px) 100vw, 1034px\" \/><\/a><\/p>\n<p>Ekran se sastoji od dva polja za unos <em>e-maila<\/em> i lozinke.<\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"email.component.html\" >&lt;div class=\"form-container\"&gt;\r\n  &lt;a routerLink=\"\/login\" id=\"goback\"&gt;Go back&lt;\/a&gt;\r\n  &lt;h2&gt;E-mail Login&lt;\/h2&gt;\r\n\r\n  &lt;span class=\"error\" *ngIf=\"error\"&gt;{{ error }}&lt;\/span&gt;\r\n\r\n  &lt;form #formData='ngForm' (ngSubmit)=\"onSubmit(formData)\"&gt;\r\n\r\n    &lt;input type=\"text\" placeholder=\"E-mail\" (ngModel)=\"email\" name=\"email\" class=\"txt\" required&gt;\r\n    &lt;input type=\"password\" placeholder=\"Password\" (ngModel)=\"password\" name=\"password\" class=\"txt\" required&gt;\r\n\r\n    &lt;button type=\"submit\" [disabled]=\"!formData.valid\" class=\"basic-btn\"&gt;Log in&lt;\/button&gt;\r\n    &lt;a routerLink=\"\/signup\" class=\"alc\"&gt;Don't have an account?&lt;\/a&gt;\r\n&lt;\/form&gt;\r\n&lt;\/div&gt;<\/pre>\n<p>Unosom ispravnih podataka za prijavu korisnik automatski bude preusmjeren na <em>Dashboard<\/em> dok u suprotnom dobije poruku o gre\u0161ci. <\/p>\n<pre class=\"lang:js decode:true \" title=\"email.component.ts\" >import { Component, OnInit } from '@angular\/core';\r\n\r\nimport { AngularFireModule } from 'angularfire2';\r\nimport { AngularFireAuth } from 'angularfire2\/auth';\r\nimport * as firebase from 'firebase\/app';\r\nimport { Router } from '@angular\/router';\r\n\r\n@Component({\r\n  selector: 'app-email',\r\n  templateUrl: '.\/email.component.html',\r\n  styleUrls: ['.\/email.component.css']\r\n})\r\nexport class EmailComponent implements OnInit {\r\n\r\n  error: any;\r\n\r\n  constructor(public _angularAuth: AngularFireAuth, \r\n              private _router: Router) { }\r\n\r\n  ngOnInit() {\r\n  }\r\n\r\n  onSubmit(formData) {\r\n    let a = this;\r\n    firebase.auth().signInWithEmailAndPassword(formData.value.email, formData.value.password)\r\n    .then(function(data) {\r\n      console.log(data);\r\n      if(data){\r\n        localStorage.setItem('email', data.email);\r\n        a._router.navigate(['\/dashboard']);\r\n      }\r\n    }).catch(function(error) {\r\n      console.log(error);\r\n      a.error = error.message;\r\n    });\r\n  }\r\n\r\n}<\/pre>\n<h3>Dashboard komponenta<\/h3>\n<p>Nalazi se na adresi <em>http:\/\/localhost:4200\/dashboard<\/em> s osnovnom svrhom prikaza podataka o korisniku nakon uspje\u0161ne prijave. U ovom slu\u010daju prikazuje se ime i prezime korisnika, <em>e-mail<\/em> adresa i slika.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-10-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-10-min.png\" alt=\"Angular &amp; Firebase \u2013 registracija i prijava\" width=\"1543\" height=\"677\" class=\"aligncenter size-full wp-image-7240\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-10-min.png 1543w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-10-min-300x132.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-10-min-768x337.png 768w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-10-min-1024x449.png 1024w\" sizes=\"auto, (max-width: 1543px) 100vw, 1543px\" \/><\/a><\/p>\n<p>Na ekranu se mogu vidjeti podaci o korisniku pod uvjetom (<em><a href=\"https:\/\/angular.io\/api\/common\/NgIf\" rel=\"noopener\" target=\"_blank\">*ngIf<\/a><\/em>) da postoje.<\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"dashboard.component.html\" >&lt;div class=\"form-container\" id=\"toolbar\"&gt;\r\n  &lt;header&gt;\r\n    &lt;button (click)=\"logout()\" class=\"basic-btn\"&gt;Logout&lt;\/button&gt;\r\n  &lt;\/header&gt;\r\n  &lt;div id=\"page\"&gt;\r\n    &lt;h2 *ngIf=\"name\"&gt;Hey {{name}}!&lt;\/h2&gt;\r\n    &lt;h6 *ngIf=\"email\"&gt;{{email}}&lt;\/h6&gt;\r\n    &lt;img *ngIf=\"picture\" src=\"{{picture}}\"\/&gt;\r\n\r\n  &lt;\/div&gt;\r\n  \r\n&lt;\/div&gt;<\/pre>\n<p>Funkcionalnost se sastoji od dohva\u0107anja podataka o korisniku, funkcije za odjavu koja prazni <em>localStorage<\/em> i vra\u0107a korisnika na po\u010detnu stranicu te funkcije za provjeru koja onemogu\u0107ava korisnike da pristupe <em>Dashboard<\/em> stranici ako nisu prijavljeni.<\/p>\n<pre class=\"lang:js decode:true \" title=\"dashboard.component.ts\" >import { Component, OnInit } from '@angular\/core';\r\n\r\nimport { AngularFireModule } from 'angularfire2';\r\nimport { AngularFireAuth } from 'angularfire2\/auth';\r\nimport * as firebase from 'firebase\/app';\r\nimport { Router } from '@angular\/router';\r\n\r\n@Component({\r\n  selector: 'app-dashboard',\r\n  templateUrl: '.\/dashboard.component.html',\r\n  styleUrls: ['.\/dashboard.component.css']\r\n})\r\nexport class DashboardComponent implements OnInit {\r\n\r\n   name: string;\r\n   picture: string;\r\n   email: string;\r\n\r\n  constructor(public _angularAuth: AngularFireAuth, \r\n              private _router: Router) { }\r\n\r\n  ngOnInit() {\r\n     this.name = localStorage.getItem('name');\r\n     this.picture = localStorage.getItem('picture');\r\n     this.email = localStorage.getItem('email');\r\n     this.provjera();\r\n  }\r\n\r\n  logout() {\r\n    \/\/this._angularAuth.auth.logout();\r\n    localStorage.clear();\r\n    console.log('logged out');\r\n    this._router.navigateByUrl('\/login');\r\n }\r\n\r\n provjera(){\r\n   if(!this.email){\r\n    this._router.navigateByUrl('\/login');\r\n   }\r\n }\r\n\r\n\r\n}<\/pre>\n<h2>Zaklju\u010dak<\/h2>\n<p>U ovom sam blog postu pokazao kako implementirati <em>Google Firebase<\/em> prijavu u <em>Angular<\/em> web projekt.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-11-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-11-min.png\" alt=\"Angular &amp; Firebase \u2013 registracija i prijava\" width=\"1361\" height=\"503\" class=\"aligncenter size-full wp-image-7243\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-11-min.png 1361w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-11-min-300x111.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-11-min-768x284.png 768w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-web-firebase-registracija-prijava-11-min-1024x378.png 1024w\" sizes=\"auto, (max-width: 1361px) 100vw, 1361px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>U ovom \u0107u blog postu napraviti primjer Angular web aplikacije koja \u0107e se sastojati od nekoliko ekrana. Glavna svrha ove web aplikacije je omogu\u0107iti korisnicima da se registriraju tj. prijave kako bi ju mogli koristiti. To \u0107e mo\u0107i u\u010diniti koriste\u0107i e-mail, Google ili Facebook korisni\u010dki ra\u010dun. Nekoliko sam blog postova ve\u0107 objavio na ovu temu, &hellip; <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/\" class=\"more-link\">Nastavi \u010ditati <span class=\"screen-reader-text\">Angular &#038; Firebase &#8211; registracija i prijava<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":7185,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[566,351],"tags":[471,385,411,410,413],"class_list":["post-7184","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend","category-razvoj","tag-angular","tag-google-firebase","tag-login","tag-prijava","tag-registracija"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Angular &amp; Firebase - registracija i prijava - Tomislav Stankovi\u0107<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/\" \/>\n<meta property=\"og:locale\" content=\"hr_HR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Angular &amp; Firebase - registracija i prijava - Tomislav Stankovi\u0107\" \/>\n<meta property=\"og:description\" content=\"U ovom \u0107u blog postu napraviti primjer Angular web aplikacije koja \u0107e se sastojati od nekoliko ekrana. Glavna svrha ove web aplikacije je omogu\u0107iti korisnicima da se registriraju tj. prijave kako bi ju mogli koristiti. To \u0107e mo\u0107i u\u010diniti koriste\u0107i e-mail, Google ili Facebook korisni\u010dki ra\u010dun. Nekoliko sam blog postova ve\u0107 objavio na ovu temu, &hellip; Nastavi \u010ditati Angular &#038; Firebase &#8211; registracija i prijava\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/\" \/>\n<meta property=\"og:site_name\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-18T16:21:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-01-05T17:49:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-firebase-registracija-prijava-login-min.png\" \/>\n\t<meta property=\"og:image:width\" content=\"825\" \/>\n\t<meta property=\"og:image:height\" content=\"510\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisao\/la\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tomislav Stankovi\u0107\" \/>\n\t<meta name=\"twitter:label2\" content=\"Procijenjeno vrijeme \u010ditanja\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minuta\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/angular-firebase-registracija-prijava\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/angular-firebase-registracija-prijava\\\/\"},\"author\":{\"name\":\"Tomislav Stankovi\u0107\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"headline\":\"Angular &#038; Firebase &#8211; registracija i prijava\",\"datePublished\":\"2018-03-18T16:21:27+00:00\",\"dateModified\":\"2019-01-05T17:49:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/angular-firebase-registracija-prijava\\\/\"},\"wordCount\":745,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/angular-firebase-registracija-prijava\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/angular-firebase-registracija-prijava-login-min.png\",\"keywords\":[\"Angular\",\"Google Firebase\",\"login\",\"prijava\",\"registracija\"],\"articleSection\":[\"Frontend\",\"Razvoj\"],\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/angular-firebase-registracija-prijava\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/angular-firebase-registracija-prijava\\\/\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/angular-firebase-registracija-prijava\\\/\",\"name\":\"Angular & Firebase - registracija i prijava - Tomislav Stankovi\u0107\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/angular-firebase-registracija-prijava\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/angular-firebase-registracija-prijava\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/angular-firebase-registracija-prijava-login-min.png\",\"datePublished\":\"2018-03-18T16:21:27+00:00\",\"dateModified\":\"2019-01-05T17:49:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/angular-firebase-registracija-prijava\\\/#breadcrumb\"},\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/angular-firebase-registracija-prijava\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/angular-firebase-registracija-prijava\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/angular-firebase-registracija-prijava-login-min.png\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/angular-firebase-registracija-prijava-login-min.png\",\"width\":825,\"height\":510,\"caption\":\"Angular & Firebase - registracija i prijava\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/angular-firebase-registracija-prijava\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Po\u010detna stranica\",\"item\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Angular &#038; Firebase &#8211; registracija i prijava\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\",\"name\":\"Tomislav Stankovi\u0107\",\"description\":\"Sam svoj bloger\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"hr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\",\"name\":\"Tomislav Stankovi\u0107\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"width\":248,\"height\":165,\"caption\":\"Tomislav Stankovi\u0107\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\"},\"description\":\"Bloger \u0161irokog raspona interesa od kojih dio voli objaviti na ovom blogu. U neslobodno vrijeme Angular developer mobilnih i web aplikacija.\",\"sameAs\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/tomislavstankovic\\\/\"],\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/author\\\/tomislavstankovic\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Angular & Firebase - registracija i prijava - Tomislav Stankovi\u0107","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/","og_locale":"hr_HR","og_type":"article","og_title":"Angular & Firebase - registracija i prijava - Tomislav Stankovi\u0107","og_description":"U ovom \u0107u blog postu napraviti primjer Angular web aplikacije koja \u0107e se sastojati od nekoliko ekrana. Glavna svrha ove web aplikacije je omogu\u0107iti korisnicima da se registriraju tj. prijave kako bi ju mogli koristiti. To \u0107e mo\u0107i u\u010diniti koriste\u0107i e-mail, Google ili Facebook korisni\u010dki ra\u010dun. Nekoliko sam blog postova ve\u0107 objavio na ovu temu, &hellip; Nastavi \u010ditati Angular &#038; Firebase &#8211; registracija i prijava","og_url":"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/","og_site_name":"Tomislav Stankovi\u0107","article_published_time":"2018-03-18T16:21:27+00:00","article_modified_time":"2019-01-05T17:49:43+00:00","og_image":[{"width":825,"height":510,"url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-firebase-registracija-prijava-login-min.png","type":"image\/png"}],"author":"Tomislav Stankovi\u0107","twitter_card":"summary_large_image","twitter_misc":{"Napisao\/la":"Tomislav Stankovi\u0107","Procijenjeno vrijeme \u010ditanja":"9 minuta"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/#article","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/"},"author":{"name":"Tomislav Stankovi\u0107","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"headline":"Angular &#038; Firebase &#8211; registracija i prijava","datePublished":"2018-03-18T16:21:27+00:00","dateModified":"2019-01-05T17:49:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/"},"wordCount":745,"commentCount":0,"publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-firebase-registracija-prijava-login-min.png","keywords":["Angular","Google Firebase","login","prijava","registracija"],"articleSection":["Frontend","Razvoj"],"inLanguage":"hr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/","url":"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/","name":"Angular & Firebase - registracija i prijava - Tomislav Stankovi\u0107","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/#primaryimage"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-firebase-registracija-prijava-login-min.png","datePublished":"2018-03-18T16:21:27+00:00","dateModified":"2019-01-05T17:49:43+00:00","breadcrumb":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/#breadcrumb"},"inLanguage":"hr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/"]}]},{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/#primaryimage","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-firebase-registracija-prijava-login-min.png","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2018\/03\/angular-firebase-registracija-prijava-login-min.png","width":825,"height":510,"caption":"Angular & Firebase - registracija i prijava"},{"@type":"BreadcrumbList","@id":"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Po\u010detna stranica","item":"https:\/\/www.tomislavstankovic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Angular &#038; Firebase &#8211; registracija i prijava"}]},{"@type":"WebSite","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website","url":"https:\/\/www.tomislavstankovic.com\/blog\/","name":"Tomislav Stankovi\u0107","description":"Sam svoj bloger","publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.tomislavstankovic.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"hr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d","name":"Tomislav Stankovi\u0107","image":{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","width":248,"height":165,"caption":"Tomislav Stankovi\u0107"},"logo":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg"},"description":"Bloger \u0161irokog raspona interesa od kojih dio voli objaviti na ovom blogu. U neslobodno vrijeme Angular developer mobilnih i web aplikacija.","sameAs":["https:\/\/www.tomislavstankovic.com\/blog\/","https:\/\/www.linkedin.com\/in\/tomislavstankovic\/"],"url":"https:\/\/www.tomislavstankovic.com\/blog\/author\/tomislavstankovic\/"}]}},"_links":{"self":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/7184","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/comments?post=7184"}],"version-history":[{"count":49,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/7184\/revisions"}],"predecessor-version":[{"id":7246,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/7184\/revisions\/7246"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media\/7185"}],"wp:attachment":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media?parent=7184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/categories?post=7184"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/tags?post=7184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}