{"id":8910,"date":"2019-01-07T06:00:39","date_gmt":"2019-01-07T04:00:39","guid":{"rendered":"https:\/\/www.tomislavstankovic.com\/blog\/?p=8910"},"modified":"2019-01-06T19:51:43","modified_gmt":"2019-01-06T17:51:43","slug":"sms-login-angular-firebase","status":"publish","type":"post","link":"https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/","title":{"rendered":"SMS login &#8211; Angular &#038; Firebase"},"content":{"rendered":"<p>U nastavku ovog blog posta pokazati \u0107u kako napraviti jednostavnu <em>Angular<\/em> web aplikaciju sa funkcionalnom SMS prijavom.<\/p>\n<p>Prednosti kori\u0161tenja SMS prijave:<\/p>\n<p> &#8211; <strong>Spre\u010davanje la\u017enih korisnika<\/strong> &#8211; kori\u0161tenjem SMS prijave onemogu\u0107ava se kreiranje la\u017enih korisnika jer svaki korisnik koji se \u017eeli prijaviti treba imati jedinstveni broj telefona na koji \u0107e dobiti kod pomo\u0107u kojega \u0107e se prijaviti.<br \/>\n&#8211; <strong>Daje dodatnu vrijednost bazi korisnika<\/strong> &#8211; svaki potvr\u0111eni korisnik koji stoji iza svakog od tih brojeva telefona predstavlja odre\u0111enu vrijednost jer mo\u017eemo biti sigurni da to nije la\u017eni korisnik.<br \/>\n&#8211; <strong>Pove\u0107ana sigurnost i pobolj\u0161ava korisni\u010dko iskustvo<\/strong> &#8211; u dana\u0161nje vrijeme korisnici koriste jako puno raznih aplikacija i postaje sve te\u017ee pratiti <em>login<\/em> podatke svake od njih. Omogu\u0107avanjem SMS prijave korisnik ne mora smi\u0161ljati novo korisni\u010dko ime ili lozinku nego je samo dovoljno da uz sebe ima svoj mobitel kako bi se uspje\u0161no prijavio. Tako\u0111er, tre\u0107a strana se ne mo\u017ee prijaviti kao npr. ja ako uz sebe nema moj mobilni telefon da pro\u010dita kod \u010dime se drasti\u010dno pove\u0107ava sigurnost. <\/p>\n<h2>Kreiranje projekta<\/h2>\n<p>Kreiram novi <em>Angular<\/em> web projekt koriste\u0107i <em><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/uvod-angular-cli\/\" rel=\"noopener\" target=\"_blank\">Angular CLI<\/a><\/em>. <\/p>\n<pre class=\"lang:sh decode:true \" >$ ng new angular-firebase-sms-login\r\n$ cd angular-firebase-sms-login<\/pre>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-1-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-1-min.png\" alt=\"Angular CLI start screen\" width=\"949\" height=\"691\" class=\"aligncenter size-full wp-image-8913\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-1-min.png 949w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-1-min-300x218.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-1-min-768x559.png 768w\" sizes=\"auto, (max-width: 949px) 100vw, 949px\" \/><\/a><\/p>\n<h2>Google Firebase<\/h2>\n<p>Nakon \u0161to sam kreirao <em>Angular<\/em> projekt mogu se prebaciti na <em><a href=\"https:\/\/console.firebase.google.com\/\" rel=\"noopener\" target=\"_blank\">Google Firebase<\/a><\/em> i ondje postaviti projekt kako bi uop\u0107e mogao koristiti <em>SMS login<\/em>.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-2-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-2-min.png\" alt=\"Google Firebase Console\" width=\"953\" height=\"907\" class=\"aligncenter size-full wp-image-8917\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-2-min.png 953w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-2-min-300x286.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-2-min-768x731.png 768w\" sizes=\"auto, (max-width: 953px) 100vw, 953px\" \/><\/a><\/p>\n<p>Kroz nekoliko sekundi <em>Firebase<\/em> projekt \u0107e biti spreman.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-3-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-3-min.png\" alt=\"Google Firebase Console\" width=\"951\" height=\"904\" class=\"aligncenter size-full wp-image-8919\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-3-min.png 951w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-3-min-300x285.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-3-min-768x730.png 768w\" sizes=\"auto, (max-width: 951px) 100vw, 951px\" \/><\/a><\/p>\n<p>Unutar izbornika <em><strong>Develop<\/strong><\/em> &#8211; <em><strong>Authentication<\/strong><\/em> potrebno je odabrati <em><strong>Sign-in-method<\/strong><\/em> tab. Ondje se nalazi popis opcija dostupnih za login\/prijavu. <\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-4-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-4-min.png\" alt=\"Google Firebase Console\" width=\"952\" height=\"906\" class=\"aligncenter size-full wp-image-8927\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-4-min.png 952w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-4-min-300x286.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-4-min-768x731.png 768w\" sizes=\"auto, (max-width: 952px) 100vw, 952px\" \/><\/a><\/p>\n<p>Ja \u0107u, naravno, ovaj put odabrati <em><strong><a href=\"https:\/\/firebase.google.com\/docs\/auth\/web\/phone-auth\" rel=\"noopener\" target=\"_blank\">Phone<\/a><\/strong><\/em>.<\/p>\n<blockquote><p>Allow users to sign in with a mobile phone number, using Firebase SDK phone verification and user authentication tools.<\/p><\/blockquote>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-5-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-5-min.png\" alt=\"Google Firebase Console Phone\" width=\"666\" height=\"511\" class=\"aligncenter size-full wp-image-8929\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-5-min.png 666w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-5-min-300x230.png 300w\" sizes=\"auto, (max-width: 666px) 100vw, 666px\" \/><\/a><\/p>\n<p><em>Phone<\/em> tj. <em>SMS<\/em> prijava je aktivirana.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-6-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-6-min.png\" alt=\"Google Firebase Console Phone\" width=\"641\" height=\"529\" class=\"aligncenter size-full wp-image-8932\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-6-min.png 641w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-6-min-300x248.png 300w\" sizes=\"auto, (max-width: 641px) 100vw, 641px\" \/><\/a><\/p>\n<p>Ako sada u izborniku <em><strong>Authentication<\/strong><\/em> &#8211; <em><strong>Users<\/strong><\/em> pogledam popis korisnika on \u0107e biti prazan jer za sada jo\u0161 nisam napravio niti jednu prijavu. Nakon \u0161to se sa bilo kojim brojem mobitela prvi put prijavim taj \u0107e se broj prikazati kao novi korisnik.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-12-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-12-min.png\" alt=\"Firebase users\" width=\"928\" height=\"519\" class=\"aligncenter size-full wp-image-8953\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-12-min.png 928w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-12-min-300x168.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-12-min-768x430.png 768w\" sizes=\"auto, (max-width: 928px) 100vw, 928px\" \/><\/a><\/p>\n<p>Prema trenutnim postavkama moj \u0107e projekt raditi ako web aplikaciju pokrenem na adresi http:\/\/localhost:4200\/.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-7-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-7-min.png\" alt=\"Firebase Authorized domains\" width=\"949\" height=\"906\" class=\"aligncenter size-full wp-image-8975\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-7-min.png 949w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-7-min-300x286.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-7-min-768x733.png 768w\" sizes=\"auto, (max-width: 949px) 100vw, 949px\" \/><\/a><\/p>\n<p>Me\u0111utim ako imam neku (pod)domenu kao npr. test.angularaplikacija.com ondje prijava putem SMS-a ne\u0107e raditi dok ru\u010dno ne odobrim tu (pod)domenu.<\/p>\n<blockquote><p>To use Firebase Authentication in a web app, you must whitelist the domains that the Firebase Authentication servers can redirect to after signing in a user.<\/p>\n<p>By default, localhost and your Firebase project&#8217;s hosting domain are whitelisted.<a href=\"https:\/\/support.google.com\/firebase\/answer\/6400741\" rel=\"noopener\" target=\"_blank\"> You must whitelist the full domain names of any other of your web app&#8217;s hosts<\/a>. Note: whitelisting a domain allows for requests from any URL and port of that domain.<\/p><\/blockquote>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-8-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-8-min.png\" alt=\"Firebase Authorized domains\" width=\"633\" height=\"292\" class=\"aligncenter size-full wp-image-8977\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-8-min.png 633w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-8-min-300x138.png 300w\" sizes=\"auto, (max-width: 633px) 100vw, 633px\" \/><\/a><\/p>\n<p>Prije nego se vratim svojem <em>Angular<\/em> projektu trebaju mi jo\u0161 neki podaci bez kojih moj <em>Angular<\/em> projekt ne bi znao kako se povezati s <em>Firebaseom<\/em>.<\/p>\n<p>Ovdje idem na <strong><em>Project settings<\/em><\/strong>.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-9-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-9-min.png\" alt=\"Google Firebase Settings\" width=\"458\" height=\"173\" class=\"aligncenter size-full wp-image-8938\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-9-min.png 458w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-9-min-300x113.png 300w\" sizes=\"auto, (max-width: 458px) 100vw, 458px\" \/><\/a><\/p>\n<p>Nakon toga idem na <em><strong>Add Firebase to your web app<\/strong><\/em>.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-10-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-10-min.png\" alt=\"Google Firebase Settings\" width=\"949\" height=\"1010\" class=\"aligncenter size-full wp-image-8940\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-10-min.png 949w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-10-min-282x300.png 282w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-10-min-768x817.png 768w\" sizes=\"auto, (max-width: 949px) 100vw, 949px\" \/><\/a><\/p>\n<p>I kona\u010dno, ovdje imam konfiguracijski <span class=\"lang:js decode:true  crayon-inline\">config<\/span> objekt koju \u0107u kasnije postaviti u svoj <em>Angular<\/em> projekt i tako ga povezati sa <em>Firebaseom<\/em>.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-11-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-11-min.png\" alt=\"Google Firebase Settings\" width=\"764\" height=\"565\" class=\"aligncenter size-full wp-image-8942\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-11-min.png 764w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-11-min-300x222.png 300w\" sizes=\"auto, (max-width: 764px) 100vw, 764px\" \/><\/a><\/p>\n<h2>Implementacija prijave\/logina<\/h2>\n<p>Sada se vra\u0107am u svoj <em>Angular<\/em> projekt. <\/p>\n<p><span class=\"lang:js decode:true  crayon-inline\">AppComponent<\/span> \u0107u malo prilagoditi tj. dodati joj nekoliko detalja kojih trenutno nema.<\/p>\n<pre class=\"lang:js mark:2-3,5,16,17,19,20 decode:true   \" title=\"app.component.ts\" >import { Component, \r\n         OnInit, \r\n         Injectable } from '@angular\/core';\r\n\r\n@Injectable()\r\n@Component({\r\n  selector: 'app-root',\r\n  templateUrl: '.\/app.component.html',\r\n  styleUrls: ['.\/app.component.css']\r\n})\r\n\r\nexport class AppComponent implements OnInit {\r\n\r\n  title = 'angular-firebase-sms-login';\r\n\r\n  constructor() {\r\n  }\r\n\r\n  ngOnInit() {\r\n  }\r\n\r\n}<\/pre>\n<p>Trebat \u0107e mi window objekt pa \u0107u napraviti servis za njega kako bi ga mogao pozivati u cijelog projektu sa jednog mjesta.<\/p>\n<pre class=\"lang:sh decode:true \" >$ ng g service window<\/pre>\n<p>U servisu se nalazi sljede\u0107e:<\/p>\n<pre class=\"lang:js decode:true \" title=\"window.service.ts\" >import { Injectable } from '@angular\/core';\r\n\r\n@Injectable()\r\nexport class WindowService {\r\n\r\n  get windowRef() {\r\n    return window\r\n  }\r\n\r\n}<\/pre>\n<p>Sada sam spreman za dodavanje <em>Firebasea<\/em> unutar projekta, a to radim naredbama:<\/p>\n<pre class=\"lang:sh decode:true \" >$ npm install --save firebase\r\n$ npm install angularfire2 firebase --save<\/pre>\n<p>Sada sve to trebam navesti unutar <strong><em>app.module.ts<\/em><\/strong> datoteke. Ovdje moram uvesti <span class=\"lang:js decode:true crayon-inline\">FormsModule<\/span> zato \u0161to \u0107u u login formi koristiti <span class=\"lang:js decode:true  crayon-inline\">[(ngModel)]<\/span>. <\/p>\n<pre class=\"lang:js mark:5-6,8-9,11-18,23,27-29 decode:true \" title=\"app.module.ts\" >import { BrowserModule } from '@angular\/platform-browser';\r\nimport { NgModule } from '@angular\/core';\r\n\r\nimport { AppComponent } from '.\/app.component';\r\nimport { DashboardComponent } from '.\/dashboard\/dashboard.component';\r\nimport { FormsModule } from '@angular\/forms';\r\n\r\nimport { AngularFireModule } from 'angularfire2';\r\nimport { AngularFireAuthModule } from 'angularfire2\/auth';\r\n\r\nexport const firebaseConfig = {\r\n  apiKey: \"***************************************\",\r\n  authDomain: \"angular-firebase-sms-login.firebaseapp.com\",\r\n  databaseURL: \"https:\/\/angular-firebase-sms-login.firebaseio.com\",\r\n  projectId: \"angular-firebase-sms-login\",\r\n  storageBucket: \"angular-firebase-sms-login.appspot.com\",\r\n  messagingSenderId: \"************\"\r\n};\r\n\r\n@NgModule({\r\n  declarations: [\r\n    AppComponent,\r\n    DashboardComponent\r\n  ],\r\n  imports: [\r\n    BrowserModule,\r\n    AngularFireModule.initializeApp(firebaseConfig),\r\n    AngularFireAuthModule,\r\n    FormsModule\r\n  ],\r\n  providers: [],\r\n  bootstrap: [AppComponent]\r\n})\r\nexport class AppModule { }<\/pre>\n<p>Na ekranu \u0107e to izgledati ovako:<\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"app.component.html\" >&lt;div style=\"text-align:center\"&gt;\r\n  &lt;h1&gt;\r\n    Welcome to {{ title }}!\r\n  &lt;\/h1&gt;\r\n  &lt;img width=\"300\" alt=\"Angular Logo\" src=\"data:image\/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTAgMjUwIj4KICAgIDxwYXRoIGZpbGw9IiNERDAwMzEiIGQ9Ik0xMjUgMzBMMzEuOSA2My4ybDE0LjIgMTIzLjFMMTI1IDIzMGw3OC45LTQzLjcgMTQuMi0xMjMuMXoiIC8+CiAgICA8cGF0aCBmaWxsPSIjQzMwMDJGIiBkPSJNMTI1IDMwdjIyLjItLjFWMjMwbDc4LjktNDMuNyAxNC4yLTEyMy4xTDEyNSAzMHoiIC8+CiAgICA8cGF0aCAgZmlsbD0iI0ZGRkZGRiIgZD0iTTEyNSA1Mi4xTDY2LjggMTgyLjZoMjEuN2wxMS43LTI5LjJoNDkuNGwxMS43IDI5LjJIMTgzTDEyNSA1Mi4xem0xNyA4My4zaC0zNGwxNy00MC45IDE3IDQwLjl6IiAvPgogIDwvc3ZnPg==\"&gt;\r\n   \r\n  &lt;div [hidden]=\"user\" style=\"text-align:center\"&gt;\r\n    &lt;label for=\"phone\"&gt;Broj mobitela:&lt;\/label&gt;&lt;br&gt;\r\n    &lt;input type=\"text\" [(ngModel)]=\"phoneNumber.country\" class=\"input\" placeholder=\"+385\"  maxlength=\"4\"&gt;\r\n    &lt;input type=\"text\" [(ngModel)]=\"phoneNumber.line\"  class=\"input\" placeholder=\"9********\" maxlength=\"9\"&gt;\r\n  \r\n    &lt;div id=\"recaptcha-container\"&gt;&lt;\/div&gt;\r\n  \r\n    &lt;button (click)=\"sendLoginCode()\"&gt;Po\u0161alji SMS&lt;\/button&gt;\r\n  \r\n    &lt;div *ngIf=\"windowRef.confirmationResult\"&gt;\r\n      &lt;hr&gt;\r\n      &lt;label for=\"code\"&gt;Ovdje unesite svoj pin&lt;\/label&gt;&lt;br&gt;\r\n      &lt;input type=\"text\" name=\"code\" [(ngModel)]=\"verificationCode\"&gt;\r\n  \r\n      &lt;button (click)=\"verifyLoginCode()\"&gt;Potvrdi&lt;\/button&gt;\r\n    &lt;\/div&gt;\r\n  &lt;\/div&gt;\r\n\r\n  &lt;div *ngIf=\"user\"&gt;\r\n    &lt;p&gt;Prijava uspje\u0161na!&lt;\/p&gt;\r\n    &lt;p&gt;UserId: {{ user?.uid }}&lt;\/p&gt;\r\n  &lt;\/div&gt;\r\n\r\n&lt;\/div&gt;<\/pre>\n<p>Funkcionalnost se mo\u017ee vidjeti u nastavku, a sastoji se od nekoliko funkcija. Osnova svega je broj mobitela koji je u <a href=\"https:\/\/en.wikipedia.org\/wiki\/E.164\" rel=\"noopener\" target=\"_blank\">E.164<\/a> obliku.<\/p>\n<pre class=\"lang:js decode:true \" title=\"app.component.ts\" >import { Component, OnInit, Injectable } from '@angular\/core';\r\nimport { WindowService } from '.\/window.service';\r\n\r\nimport { AngularFireAuth } from 'angularfire2\/auth';\r\nimport * as firebase from 'firebase\/app';\r\n\r\nexport class PhoneNumber {\r\n  country: string = \"+385\";\r\n  line: string;\r\n  get e164() {\r\n    const num = this.country + this.line\r\n    return `+${num}`\r\n  }\r\n}\r\n\r\n@Injectable()\r\n@Component({\r\n  selector: 'app-root',\r\n  templateUrl: '.\/app.component.html',\r\n  styleUrls: ['.\/app.component.css'],\r\n  providers: [WindowService]\r\n})\r\nexport class AppComponent implements OnInit {\r\n  \r\n  title = 'Angular Firebase SMS Login';\r\n\r\n  windowRef: any;\r\n  phoneNumber = new PhoneNumber()\r\n  verificationCode: string;\r\n  user: any; \r\n\r\n  constructor(\r\n    private win: WindowService,\r\n    public _angularAuth: AngularFireAuth) {\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.windowRef = this.win.windowRef;\r\n    this.windowRef.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container')\r\n    this.windowRef.recaptchaVerifier.render();\r\n  }\r\n\r\n  sendLoginCode() {\r\n    const appVerifier = this.windowRef.recaptchaVerifier;\r\n    const num = this.phoneNumber.e164;\r\n    firebase.auth().signInWithPhoneNumber(num, appVerifier)\r\n            .then(result =&gt; {\r\n                this.windowRef.confirmationResult = result;\r\n            })\r\n            .catch( error =&gt; console.log(error) );\r\n  }\r\n\r\n  verifyLoginCode() {\r\n    this.windowRef.confirmationResult\r\n                  .confirm(this.verificationCode)\r\n                  .then( result =&gt; {\r\n                    this.user = result.user;\r\n                    console.log(this.user);\r\n    })\r\n    .catch( error =&gt; console.log(error, \"Pogre\u0161an kod?\"));\r\n  } \r\n\r\n}<\/pre>\n<p>U praksi to izgleda ovako:<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-14.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-14.gif\" alt=\"SMS login \u2013 Angular &amp; Firebase\" width=\"939\" height=\"677\" class=\"aligncenter size-full wp-image-8957\" \/><\/a><\/p>\n<p>Klikom na &#8220;Po\u0161alji SMS&#8221; \u0161alje se SMS poruka na uneseni broj mobitela.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-16-min.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-16-min.jpg\" alt=\"Firebase SMS\" width=\"360\" height=\"640\" class=\"aligncenter size-full wp-image-8972\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-16-min.jpg 360w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-16-min-169x300.jpg 169w\" sizes=\"auto, (max-width: 360px) 100vw, 360px\" \/><\/a><\/p>\n<p>Nakon unosa koda iz SMS-a uspje\u0161no se prijavljujem.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-15-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-15-min.png\" alt=\"Angular &amp; Firebase\" width=\"1257\" height=\"908\" class=\"aligncenter size-full wp-image-8970\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-15-min.png 1257w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-15-min-300x217.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-15-min-768x555.png 768w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-15-min-1024x740.png 1024w\" sizes=\"auto, (max-width: 1257px) 100vw, 1257px\" \/><\/a><\/p>\n<p>U slu\u010daju da se idem nekoliko puta za redom prijaviti i <em>Google Firebase<\/em> posumnja na zloupotrebu pojavit \u0107e se napredna <em><a href=\"https:\/\/www.google.com\/recaptcha\/intro\/v3.html\" rel=\"noopener\" target=\"_blank\">reCAPTCHA<\/a><\/em>.<\/p>\n<figure id=\"attachment_8965\" aria-describedby=\"caption-attachment-8965\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-16.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-16.gif\" alt=\"Firebase Phone Authentication With Angular 4 Tutorial\" width=\"600\" height=\"338\" class=\"size-full wp-image-8965\" \/><\/a><figcaption id=\"caption-attachment-8965\" class=\"wp-caption-text\">Izvor: https:\/\/angularfirebase.com\/lessons\/firebase-phone-authentication-with-angular-4-tutorial\/<\/figcaption><\/figure>\n<p>Tek sada, nakon \u0161to je prijava uspje\u0161no pro\u0161la, mogu svoj broj mobitela vidjeti unutar <em>Google Firebase<\/em> su\u010delja.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-13-min.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-13-min.png\" alt=\"Firebase users\" width=\"1229\" height=\"394\" class=\"aligncenter size-full wp-image-8968\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-13-min.png 1229w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-13-min-300x96.png 300w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-13-min-768x246.png 768w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-13-min-1024x328.png 1024w\" sizes=\"auto, (max-width: 1229px) 100vw, 1229px\" \/><\/a><\/p>\n<h2>Zaklju\u010dak<\/h2>\n<p>Ovo je bio <strong>primjer jednostavne<\/strong> <em><strong>Angular<\/strong><\/em> <strong>web aplikacije sa SMS prijavom gdje se sva logika odvija na klijentskoj strani<\/strong>. Nedavno sam napravio i verziju gdje se sva logika odvija na serverskoj strani unutar <em><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/node-js-resursi\/\" rel=\"noopener\" target=\"_blank\">NodeJS<\/a><\/em>-a sa dodatnim sigurnosnim provjerama. Bilo bi previ\u0161e za ovaj blog post da sam i\u0161ao i taj dio obraditi. Mo\u017eda u nekom od sljede\u0107ih blog postova, ako netko od posjetitelja bloga bude zainteresiran. <\/p>\n<p>Osim SMS prijave obradio sam nekoliko tema s ostalim vrstama prijave kao \u0161to su:<br \/>\n&#8211; <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/angular-firebase-registracija-prijava\/\" rel=\"noopener\" target=\"_blank\">Angular &#038; Firebase \u2013 registracija i prijava<\/a><br \/>\n&#8211; <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-3-google-login-prijava\/\" rel=\"noopener\" target=\"_blank\">Ionic 3 \u2013 Google login\/prijava <\/a><br \/>\n&#8211; <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-facebook-prijava-login\/\" rel=\"noopener\" target=\"_blank\">Ionic 3 \u2013 Facebook prijava<\/a><br \/>\n&#8211; <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/ionic-firebase-registracija-prijava\/\" rel=\"noopener\" target=\"_blank\">Ionic 3 \u2013 Firebase registracija i prijava<\/a><\/p>\n<p>Struktura projekta prema <strong>package.json<\/strong><\/p>\n<pre class=\"lang:js decode:true \" title=\"package.json\" >{\r\n  \"name\": \"angular-firebase-sms-login\",\r\n  \"version\": \"0.0.0\",\r\n  \"scripts\": {\r\n    \"ng\": \"ng\",\r\n    \"start\": \"ng serve\",\r\n    \"build\": \"ng build\",\r\n    \"test\": \"ng test\",\r\n    \"lint\": \"ng lint\",\r\n    \"e2e\": \"ng e2e\"\r\n  },\r\n  \"private\": true,\r\n  \"dependencies\": {\r\n    \"@angular\/animations\": \"~7.1.0\",\r\n    \"@angular\/common\": \"~7.1.0\",\r\n    \"@angular\/compiler\": \"~7.1.0\",\r\n    \"@angular\/core\": \"~7.1.0\",\r\n    \"@angular\/forms\": \"~7.1.0\",\r\n    \"@angular\/platform-browser\": \"~7.1.0\",\r\n    \"@angular\/platform-browser-dynamic\": \"~7.1.0\",\r\n    \"@angular\/router\": \"~7.1.0\",\r\n    \"angularfire2\": \"^5.1.1\",\r\n    \"core-js\": \"^2.5.4\",\r\n    \"firebase\": \"^5.7.2\",\r\n    \"rxjs\": \"~6.3.3\",\r\n    \"tslib\": \"^1.9.0\",\r\n    \"zone.js\": \"~0.8.26\"\r\n  },\r\n  \"devDependencies\": {\r\n    \"@angular-devkit\/build-angular\": \"~0.11.0\",\r\n    \"@angular\/cli\": \"~7.1.4\",\r\n    \"@angular\/compiler-cli\": \"~7.1.0\",\r\n    \"@angular\/language-service\": \"~7.1.0\",\r\n    \"@types\/node\": \"~8.9.4\",\r\n    \"@types\/jasmine\": \"~2.8.8\",\r\n    \"@types\/jasminewd2\": \"~2.0.3\",\r\n    \"codelyzer\": \"~4.5.0\",\r\n    \"jasmine-core\": \"~2.99.1\",\r\n    \"jasmine-spec-reporter\": \"~4.2.1\",\r\n    \"karma\": \"~3.1.1\",\r\n    \"karma-chrome-launcher\": \"~2.2.0\",\r\n    \"karma-coverage-istanbul-reporter\": \"~2.0.1\",\r\n    \"karma-jasmine\": \"~1.1.2\",\r\n    \"karma-jasmine-html-reporter\": \"^0.2.2\",\r\n    \"protractor\": \"~5.4.0\",\r\n    \"ts-node\": \"~7.0.0\",\r\n    \"tslint\": \"~5.11.0\",\r\n    \"typescript\": \"~3.1.6\"\r\n  }\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>U nastavku ovog blog posta pokazati \u0107u kako napraviti jednostavnu Angular web aplikaciju sa funkcionalnom SMS prijavom. Prednosti kori\u0161tenja SMS prijave: &#8211; Spre\u010davanje la\u017enih korisnika &#8211; kori\u0161tenjem SMS prijave onemogu\u0107ava se kreiranje la\u017enih korisnika jer svaki korisnik koji se \u017eeli prijaviti treba imati jedinstveni broj telefona na koji \u0107e dobiti kod pomo\u0107u kojega \u0107e se &hellip; <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/\" class=\"more-link\">Nastavi \u010ditati <span class=\"screen-reader-text\">SMS login &#8211; Angular &#038; Firebase<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":8936,"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,417],"class_list":["post-8910","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend","category-razvoj","tag-angular","tag-google-firebase","tag-login","tag-sms"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>SMS login - Angular &amp; Firebase - 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\/sms-login-angular-firebase\/\" \/>\n<meta property=\"og:locale\" content=\"hr_HR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SMS login - Angular &amp; Firebase - Tomislav Stankovi\u0107\" \/>\n<meta property=\"og:description\" content=\"U nastavku ovog blog posta pokazati \u0107u kako napraviti jednostavnu Angular web aplikaciju sa funkcionalnom SMS prijavom. Prednosti kori\u0161tenja SMS prijave: &#8211; Spre\u010davanje la\u017enih korisnika &#8211; kori\u0161tenjem SMS prijave onemogu\u0107ava se kreiranje la\u017enih korisnika jer svaki korisnik koji se \u017eeli prijaviti treba imati jedinstveni broj telefona na koji \u0107e dobiti kod pomo\u0107u kojega \u0107e se &hellip; Nastavi \u010ditati SMS login &#8211; Angular &#038; Firebase\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/\" \/>\n<meta property=\"og:site_name\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta property=\"article:published_time\" content=\"2019-01-07T04:00:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-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=\"7 minuta\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/sms-login-angular-firebase\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/sms-login-angular-firebase\\\/\"},\"author\":{\"name\":\"Tomislav Stankovi\u0107\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"headline\":\"SMS login &#8211; Angular &#038; Firebase\",\"datePublished\":\"2019-01-07T04:00:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/sms-login-angular-firebase\\\/\"},\"wordCount\":817,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/sms-login-angular-firebase\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/angular-firebase-sms-login-min.png\",\"keywords\":[\"Angular\",\"Google Firebase\",\"login\",\"SMS\"],\"articleSection\":[\"Frontend\",\"Razvoj\"],\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/sms-login-angular-firebase\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/sms-login-angular-firebase\\\/\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/sms-login-angular-firebase\\\/\",\"name\":\"SMS login - Angular & Firebase - Tomislav Stankovi\u0107\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/sms-login-angular-firebase\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/sms-login-angular-firebase\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/angular-firebase-sms-login-min.png\",\"datePublished\":\"2019-01-07T04:00:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/sms-login-angular-firebase\\\/#breadcrumb\"},\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/sms-login-angular-firebase\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/sms-login-angular-firebase\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/angular-firebase-sms-login-min.png\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/angular-firebase-sms-login-min.png\",\"width\":825,\"height\":510,\"caption\":\"SMS login \u2013 Angular & Firebase\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/sms-login-angular-firebase\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Po\u010detna stranica\",\"item\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SMS login &#8211; Angular &#038; Firebase\"}]},{\"@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":"SMS login - Angular & Firebase - 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\/sms-login-angular-firebase\/","og_locale":"hr_HR","og_type":"article","og_title":"SMS login - Angular & Firebase - Tomislav Stankovi\u0107","og_description":"U nastavku ovog blog posta pokazati \u0107u kako napraviti jednostavnu Angular web aplikaciju sa funkcionalnom SMS prijavom. Prednosti kori\u0161tenja SMS prijave: &#8211; Spre\u010davanje la\u017enih korisnika &#8211; kori\u0161tenjem SMS prijave onemogu\u0107ava se kreiranje la\u017enih korisnika jer svaki korisnik koji se \u017eeli prijaviti treba imati jedinstveni broj telefona na koji \u0107e dobiti kod pomo\u0107u kojega \u0107e se &hellip; Nastavi \u010ditati SMS login &#8211; Angular &#038; Firebase","og_url":"https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/","og_site_name":"Tomislav Stankovi\u0107","article_published_time":"2019-01-07T04:00:39+00:00","og_image":[{"width":825,"height":510,"url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-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":"7 minuta"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/#article","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/"},"author":{"name":"Tomislav Stankovi\u0107","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"headline":"SMS login &#8211; Angular &#038; Firebase","datePublished":"2019-01-07T04:00:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/"},"wordCount":817,"commentCount":0,"publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-min.png","keywords":["Angular","Google Firebase","login","SMS"],"articleSection":["Frontend","Razvoj"],"inLanguage":"hr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/","url":"https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/","name":"SMS login - Angular & Firebase - Tomislav Stankovi\u0107","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/#primaryimage"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-min.png","datePublished":"2019-01-07T04:00:39+00:00","breadcrumb":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/#breadcrumb"},"inLanguage":"hr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/"]}]},{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/#primaryimage","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-min.png","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/01\/angular-firebase-sms-login-min.png","width":825,"height":510,"caption":"SMS login \u2013 Angular & Firebase"},{"@type":"BreadcrumbList","@id":"https:\/\/www.tomislavstankovic.com\/blog\/sms-login-angular-firebase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Po\u010detna stranica","item":"https:\/\/www.tomislavstankovic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SMS login &#8211; Angular &#038; Firebase"}]},{"@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\/8910","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=8910"}],"version-history":[{"count":63,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/8910\/revisions"}],"predecessor-version":[{"id":8991,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/8910\/revisions\/8991"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media\/8936"}],"wp:attachment":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media?parent=8910"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/categories?post=8910"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/tags?post=8910"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}