﻿
{"id":8239,"date":"2018-06-20T21:06:10","date_gmt":"2018-06-20T21:06:10","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=8239"},"modified":"2018-06-20T21:06:10","modified_gmt":"2018-06-20T21:06:10","slug":"angular-4-route-guards-canactivate","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/angular-4-route-guards-canactivate\/","title":{"rendered":"Angular 4 &#8211; Route Guards CanActivate"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde Angular 4 uygulamalar\u0131nda kullan\u0131c\u0131 y\u00f6nlendirmelerinde detayl\u0131 kontrol ve optimizasyon sa\u011flamam\u0131za imkan tan\u0131yan <strong>Route Guards<\/strong> yap\u0131s\u0131n\u0131 inceleyece\u011fiz.<\/p>\n<h4>Route Guards Nedir?<\/h4>\n<p>Route Guards, yukar\u0131da da bahsetti\u011fimiz gibi kullan\u0131c\u0131 y\u00f6nlendirmelerinde detayl\u0131 kontrol mekanizmas\u0131 sa\u011flamaktad\u0131rlar. Bu yap\u0131lara en g\u00fczel \u00f6rne\u011fi oturum a\u00e7ma durumlar\u0131 \u00fczerinden verebiliriz. E\u011fer ki bir kullan\u0131c\u0131 oturum a\u00e7madan sipari\u015f vermeye yahut oturum gerektiren herhangi bir i\u015flem yapmaya yelteniyorsa burada Route Guards devreye girecek, oturum giri\u015fini sa\u011flayabilmek i\u00e7in gerekli login sayfas\u0131na y\u00f6nlendirecek ve oturum a\u00e7\u0131ld\u0131ktan sonra gelinen sayfaya tekrar y\u00f6nlendirerek kal\u0131nan noktadan devam edilmesini sa\u011flayacakt\u0131r.<\/p>\n<p>Buradan; Route Guards, kontrol edilen sayfan\u0131n o anki aktiflik durumunu de\u011ferlendiriyor diyebiliriz. Bu de\u011ferlendirme s\u00fcrecinde sayfa aktif de\u011filse aktifle\u015ftirme i\u015flemi i\u00e7in bir ba\u015fka sayfaya y\u00f6nlendirmektedir. Tabi bu i\u015flem akabinde gelinen sayfaya tekrar y\u00f6nlendirme sa\u011flanaca\u011f\u0131 i\u00e7in hangi sayfadan gelindi\u011fi bilgisinide bizlere sunacakt\u0131r.<\/p>\n<p>Dolay\u0131s\u0131yla bu i\u015flemleri yapabilmek i\u00e7in &#8220;CanActivate&#8221;, &#8220;ActivatedRouteSnapshot&#8221; ve &#8220;RouterStateSnapshot&#8221; olmak \u00fczere \u00fc\u00e7 farkl\u0131 mod\u00fclden yararlanaca\u011f\u0131z.<\/p>\n<ul>\n<li><strong>CanActivate<\/strong><br \/>\nE\u011fer bir s\u0131n\u0131f\u0131n Guard olmas\u0131 isteniyorsa ilgili s\u0131n\u0131f CanActivate interface&#8217;inden implement ediliyor olmas\u0131 gerekmektedir.\n<\/li>\n<li><strong>ActivatedRouteSnapshot<\/strong><br \/>\nKullan\u0131c\u0131n\u0131n gitmek istedi\u011fi route&#8217;u tutmaktad\u0131r.\n<\/li>\n<li><strong>RouterStateSnapshot<\/strong><br \/>\nKullan\u0131c\u0131n\u0131n geldi\u011fi route&#8217;u tutmaktad\u0131r.\n<\/li>\n<\/ul>\n<p>\u015eimdi Route Guards ile ilgili bir \u00f6rnek \u00fczerinden gidelim.<\/p>\n<p>Yukar\u0131daki sat\u0131rlarda oturum a\u00e7ma \u00fczerinden teorik \u00f6rneklendirmede bulundu\u011fumuz i\u00e7in benzer konu \u00fczerinden bir senaryo ile konumuzu pratik olarak \u00f6rneklendirelim.<\/p>\n<p>\u0130lk olarak login i\u015flemleri i\u00e7in Guard g\u00f6revi g\u00f6recek &#8220;LoginGuard&#8221; isimli s\u0131n\u0131f\u0131m\u0131z\u0131 in\u015fa edelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Injectable } from &quot;@angular\/core&quot;;\r\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from &quot;@angular\/router&quot;;\r\nimport { LocalStorageService } from 'angular-2-local-storage';\r\n\r\n@Injectable()\r\nexport class LoginGuard implements CanActivate {\r\n    constructor(private localStorageService: LocalStorageService, private router: Router) {\r\n    }\r\n\r\n    canActivate(gidilecekSayfa: ActivatedRouteSnapshot, gelinenSayfa: RouterStateSnapshot): boolean {\r\n        if (this.localStorageService.get(&quot;userName&quot;) == &quot;gncy&quot; &amp;&amp; this.localStorageService.get(&quot;password&quot;) == &quot;1234&quot;)\r\n            return true;\r\n            \r\n        this.router.navigate(&#x5B;&quot;login&quot;]);\r\n        return false;\r\n    }\r\n}\r\n\r\n<\/pre>\n<p>Dikkat ederseniz bu s\u0131n\u0131f &#8220;Injectable&#8221; interface&#8217;inden declare edilerek bir servis \u015feklinde tasarlanm\u0131\u015ft\u0131r ve &#8220;CanActivate&#8221; interface&#8217;inden dolay\u0131 geri boolean tipinde de\u011fer d\u00f6nen &#8220;canActivate&#8221; fonksiyonu implement edilmi\u015ftir. Bu fonksiyon &#8220;true&#8221; de\u011feri d\u00f6nerse i\u015flem yap\u0131lan sayfada oturum a\u00e7\u0131k manas\u0131na gelecektir. Yok e\u011fer &#8220;false&#8221; de\u011feri d\u00f6nerse \u00f6ncelikle oturum a\u00e7\u0131lma sayfas\u0131na y\u00f6nlendirilecek, oturum a\u00e7\u0131ld\u0131ktan sonra ard\u0131ndan i\u015flem yap\u0131lacak sayfaya tekrar y\u00f6nlendirme ger\u00e7ekle\u015ftirilecektir.<\/p>\n<p>Burada oturum i\u015flemleri i\u00e7in <a href=\"http:\/\/www.gencayyildiz.com\/blog\/angular-4-local-storage-kullanimi\/\" rel=\"noopener\" target=\"_blank\">Angular 4 \u2013 Local Storage Kullan\u0131m\u0131<\/a> ba\u015fl\u0131kl\u0131 makalede de\u011findi\u011fim yerel depo birimini kulland\u0131\u011f\u0131m\u0131 hat\u0131rlatmak isterim.<\/p>\n<p>Ard\u0131ndan oturum i\u015flemi i\u00e7in kullanaca\u011f\u0131m\u0131z &#8220;LoginComponent&#8221; sayfas\u0131n\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { Component, OnInit } from '@angular\/core';\r\nimport { LocalStorageService } from 'angular-2-local-storage';\r\n\r\n@Component({\r\n  selector: 'app-login',\r\n  templateUrl: '.\/login.component.html',\r\n  styleUrls: &#x5B;'.\/login.component.css']\r\n})\r\nexport class LoginComponent implements OnInit {\r\n  constructor(private localStorageService: LocalStorageService) { }\r\n  Login(userName, password) {\r\n    this.localStorageService.set(&quot;userName&quot;, userName);\r\n    this.localStorageService.set(&quot;password&quot;, password);\r\n  }\r\n  ngOnInit() {\r\n  }\r\n}\r\n<\/pre>\n<p>Bu sayfan\u0131n g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nUser Name\r\n&lt;br&gt;\r\n&lt;input type=&quot;text&quot; #txtUserName \/&gt;\r\n&lt;br&gt; Password\r\n&lt;br&gt;\r\n&lt;input type=&quot;text&quot; #txtPassword \/&gt;\r\n&lt;br&gt;\r\n&lt;button (click)=&quot;Login(txtUserName.value, txtPassword.value)&quot;&gt;Login&lt;\/button&gt;\r\n<\/pre>\n<p>Ana mod\u00fcl\u00fcm\u00fcz olan &#8220;app.module.ts&#8221; sayfas\u0131na da g\u00f6z atarsak e\u011fer;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nimport { BrowserModule } from '@angular\/platform-browser';\r\nimport { NgModule } from '@angular\/core';\r\nimport { Route, RouterModule } from &quot;@angular\/router&quot;;\r\n\r\nimport { AppComponent } from '.\/app.component';\r\nimport { SiparisComponent } from '.\/siparis\/siparis.component';\r\nimport { LoginComponent } from '.\/login\/login.component';\r\n\r\nimport { LocalStorageModule } from 'angular-2-local-storage';\r\nimport { LoginGuard } from '.\/login-guard';\r\n\r\nexport const AppRoute: Route&#x5B;] = &#x5B;\r\n  { path: &quot;siparis&quot;, component: SiparisComponent, canActivate: &#x5B;LoginGuard] },\r\n  { path: &quot;login&quot;, component: LoginComponent }\r\n];\r\n\r\n@NgModule({\r\n  declarations: &#x5B;\r\n    AppComponent,\r\n    SiparisComponent,\r\n    LoginComponent\r\n  ],\r\n  imports: &#x5B;\r\n    BrowserModule,\r\n    LocalStorageModule.withConfig({\r\n      prefix: &quot;g&quot;,\r\n      storageType: &quot;localStorage&quot;\r\n    }),\r\n    RouterModule.forRoot(AppRoute)\r\n  ],\r\n  providers: &#x5B;LoginGuard],\r\n  bootstrap: &#x5B;AppComponent]\r\n})\r\nexport class AppModule { }\r\n<\/pre>\n<p>Dikkat ederseniz e\u011fer &#8220;SiparisComponent&#8221;in routeunda kontrol mekanizmas\u0131 olmas\u0131 amac\u0131yla &#8220;canActivate&#8221; \u00f6zelli\u011fi ile olu\u015fturmu\u015f oldu\u011fumuz &#8220;LoginGuard&#8221; servisi belirtilmi\u015ftir. Bu \u015fekilde her &#8220;SiparisComponent&#8221; tetiklendi\u011finde \u00f6ncelikle &#8220;LoginGuard&#8221;a g\u00f6z at\u0131lacak ve aktifli\u011fi kontrol edilecektir. Ayr\u0131ca &#8220;LoginGuard&#8221; mod\u00fcl\u00fcn &#8220;providers&#8221; \u00f6zelli\u011fine eklenerek t\u00fcm uygulama i\u00e7in global bir nesne haline getirilmi\u015ftir.<\/p>\n<p>\u015eimdi ise s\u0131radan bir tasar\u0131m sa\u011flayacak \u015fekilde &#8220;app.component.html&#8221; dosyas\u0131na a\u015fa\u011f\u0131daki aray\u00fcz\u00fc tasarlayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;a routerLink=&quot;siparis&quot;&gt;Sipari\u015f&lt;\/a&gt; -\r\n&lt;a routerLink=&quot;login&quot;&gt;Oturum A\u00e7&lt;\/a&gt;\r\n&lt;div&gt;\r\n  &lt;router-outlet&gt;&lt;\/router-outlet&gt;\r\n&lt;\/div&gt;\r\n<\/pre>\n<p>Uygulamay\u0131 kaydedip, yay\u0131nlad\u0131\u011f\u0131m\u0131zda a\u015fa\u011f\u0131daki gibi bir i\u015fleyi\u015fle kar\u015f\u0131la\u015faca\u011f\u0131z.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Angular-4-Route-Guards-CanActivate.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Angular-4-Route-Guards-CanActivate.gif\" alt=\"Angular 4 - Route Guards CanActivate\" width=\"600\" height=\"87\" class=\"aligncenter size-full wp-image-8253\" \/><\/a><\/p>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere login yap\u0131lmadan sipari\u015f sayfas\u0131na yap\u0131lan talep neticesinde &#8220;LoginGuard&#8221; devreye giriyor ve \u00f6ncelikle oturum a\u00e7ma i\u015flemi i\u00e7in &#8220;login&#8221; sayfas\u0131na y\u00f6nlendiriyor. Login sayfas\u0131nda yap\u0131lan oturum i\u015flemi neticesinde sipari\u015f sayfas\u0131na giri\u015f ger\u00e7ekle\u015ftiriliyor.<\/p>\n<p>Faydalanman\u0131z dile\u011fiyle&#8230;<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde Angular 4 uygulamalar\u0131nda kullan\u0131c\u0131 y\u00f6nlendirmelerinde detayl\u0131 kontrol ve optimizasyon sa\u011flamam\u0131za imkan tan\u0131yan Route Guards yap\u0131s\u0131n\u0131 inceleyece\u011fiz. Route Guards Nedir? Route Guards, yukar\u0131da da bahsetti\u011fimiz gibi kullan\u0131c\u0131 y\u00f6nlendirmelerinde detayl\u0131 kontrol mekanizmas\u0131 sa\u011flamaktad\u0131rlar.&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":7246,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2144],"tags":[2390,2146,2387,2389,2388,2386,2391],"class_list":["post-8239","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-angular-4","tag-activatedroutesnapshot","tag-angular-4","tag-angular-route-guards-canactivate","tag-canactivate","tag-route-guards","tag-route-guards-canactivate","tag-routerstatesnapshot"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/8239","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=8239"}],"version-history":[{"count":16,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/8239\/revisions"}],"predecessor-version":[{"id":8256,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/8239\/revisions\/8256"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/7246"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=8239"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=8239"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=8239"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}