{"id":44141,"date":"2022-09-15T12:42:01","date_gmt":"2022-09-15T16:42:01","guid":{"rendered":"https:\/\/www.andysowards.com\/blog\/?p=44141"},"modified":"2022-09-22T21:39:27","modified_gmt":"2022-09-23T01:39:27","slug":"authentication-in-angular-apps-a-practical-guide","status":"publish","type":"post","link":"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/","title":{"rendered":"Authentication in Angular Apps: A Practical Guide"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">What is Angular?<\/h2>\n\n\n\n<p>Frameworks provide a consistent structure that ensures developers do not have to rebuild code from scratch, significantly improving web development efficiency and performance. They offer various extra features you can add to your software without any effort.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.andysowards.com\/blog\/2019\/angular-7-ultimate-guide\/\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" data-src=\"https:\/\/www.andysowards.com\/blog\/assets\/tutorial-build-a-real-world-beautiful-web-app-with-angular-6-a-to-z-ultimate-guide-2018-part-1.png\" alt=\"\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 1000px; --smush-placeholder-aspect-ratio: 1000\/562;\" \/><\/a><figcaption><em>Angular 7: The Ultimate Guide<\/em><\/figcaption><\/figure>\n\n\n\n<p>Angular is a framework written in TypeScript. You can use it to build single-page client applications with TypeScript and HTML. The framework is component-based, allowing you to build scalable web applications.&nbsp;<\/p>\n\n\n\n<p>Angular implements functionality as TypeScript libraries that you can import into applications. It includes a collection of integrated libraries with various features, such as routing, client-server communication, <a href=\"https:\/\/cloudinary.com\/blog\/file_upload_with_angular_or_angularjs_to_cloudinary\" target=\"_blank\" rel=\"noreferrer noopener\">file upload<\/a>, and forms management. Angular also provides tools for developing, building, testing, updating code, and uploading files.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What is Authentication?<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/medium.com\/nerd-for-tech\/why-angular-is-getting-the-highest-preference-among-developers-ce964d6a401d\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" data-src=\"https:\/\/www.andysowards.com\/blog\/assets\/why-angular-is-getting-the-highest-preference-among-developers.jpeg\" alt=\"\" class=\"wp-image-44149 lazyload\" width=\"850\" height=\"487\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 850px; --smush-placeholder-aspect-ratio: 850\/487;\" \/><\/a><figcaption><em>Why Angular is getting the highest preference among developers?<\/em><\/figcaption><\/figure>\n\n\n\n<p><a href=\"https:\/\/frontegg.com\/blog\/authentication\" target=\"_blank\" rel=\"noreferrer noopener\">Authentication is a basic access control<\/a> implemented to protect systems, applications, data, and networks. Authentication technology requires users to prove their identity by providing various factors, like usernames and passwords, IDs, fingerprints, irises, and more. Once the computer system recognizes these authentication credentials, it recognizes the user as a legitimate one.<\/p>\n\n\n\n<p>Authentication is a <a href=\"https:\/\/www.catonetworks.com\/network-security\/\" target=\"_blank\" rel=\"noreferrer noopener\">foundation of network security<\/a>, and is becoming more important. Many organizations are transitioning to a Zero Trust security model, in which all connections, whether from external parties or internal users within an organization\u2019s network, must be authenticated and verified.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Authentication in Angular With Auth Guards and JWT<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/javascript.plainenglish.io\/top-reasons-why-you-need-angular-for-your-next-web-development-project-fd5ccea68f23\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"700\" height=\"256\" data-src=\"https:\/\/www.andysowards.com\/blog\/assets\/Top-Reasons-Why-You-Need-Angular-For-Your-Next-Web-Development-Project.png\" alt=\"\" class=\"wp-image-44150 lazyload\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 700px; --smush-placeholder-aspect-ratio: 700\/256;\" \/><\/a><figcaption><em>Top Reasons Why You Need Angular For Your Next Web Development Project<\/em><\/figcaption><\/figure>\n\n\n\n<p>Angular allows controlling access to parts of an application by making it authentication or permission-based through Route Guards. Route Guards are interfaces that tell an Angular application router whether or not to allow a request to access a specific route.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Create Authentication Service<\/h3>\n\n\n\n<p>User authentication in Angular is built using the canActivate lifecycle event. It returns true if the user can access a page and false otherwise. This tutorial uses JSON web tokens for user authentication.<\/p>\n\n\n\n<p><strong>To create an authentication service in Angular:<\/strong><\/p>\n\n\n\n<p>Use the following command to generate the authentication service:<\/p>\n\n\n\n<pre class=\"html\">ng g service demoAuth<\/pre>\n\n\n\n<p>This command will create an AuthGuard called <em>demoAuth<\/em> and a file with the following AuthGuard boilerplate code in the services folder.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { Injectable } from '@angular\/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class AuthService {\r\n\r\n  constructor() { }\r\n\r\n  isLoggedIn() {\r\n    const token = localStorage.getItem('token'); \/\/ get token from local storage\r\n    const payload = atob(token.split('.')&#91;1]); \/\/ decode payload of token\r\n    const parsedPayload = JSON.parse(payload); \/\/ convert payload into an Object\r\n\r\n    return parsedPayload.exp > Date.now() \/ 1000; \/\/ check if token is expired\r\n\r\n  }\r\n\r\n}\r<\/code><\/pre>\n\n\n\n<p>The<em> isLoggedIn()<\/em> function checks the JSON token in local storage and checks validity for user authentication.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Create and Enforce Route Guard<\/h3>\n\n\n\n<p><strong>To create a Route Guard and implement it:<\/strong><\/p>\n\n\n\n<ol><li>Use the following command to create the guard:<\/li><\/ol>\n\n\n\n<pre class=\"html\">ng g guard demoAuth<\/pre>\n\n\n\n<p>This command generates a file named<em> demoAuth.guard.ts<\/em>. In addition, it implements the <em>CanActivate<\/em> interface:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { Injectable } from '@angular\/core';\r\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular\/router';\r\nimport { Observable } from 'rxjs';\r\nimport { AuthService } from '.\/demoAuth.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class AuthGuard implements CanActivate {\r\n\r\n  constructor(private authService: AuthService, private router: Router) {}\r\n\r\n  canActivate(\r\n    next: ActivatedRouteSnapshot,\r\n    state: RouterStateSnapshot): Observable&lt;boolean> | Promise&lt;boolean> | boolean {\r\n\r\n      if (!this.authService.isLoggedIn()) {\r\n        this.router.navigate(&#91;'\/login']); \/\/ go to login if not authenticated\r\n        return false;\r\n      }\r\n    return true;\r\n  }\r\n}\r\n<\/code><\/pre>\n\n\n\n<p>The <em>canActivate()<\/em> method uses <em>AuthGuard<\/em> and its JSON validating functionality to check if a user is logged in or out.<\/p>\n\n\n\n<ol start=\"2\"><li>Use the following code to put the route guard to use through<em> canActivate()<\/em>:<\/li><\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>import { NgModule } from '@angular\/core';\r\nimport { Routes, RouterModule } from '@angular\/router';\r\nimport { DemoAppHomeComponent } from '.\/home\/home.component';\r\nimport { DemoAppLoginComponent } from '.\/login\/login.component';\r\nimport { AuthGuard } from '.\/demoAuth.guard';\r\n\r\nconst routes: Routes = &#91;\r\n  { path: '', redirectTo: '\/home', pathMatch: 'full' },\r\n  { path: 'demoLogin', component: DemoAppLoginComponent },\r\n  { path: 'demoHome', component: DemoAppHomeComponent,\r\n    canActivate: &#91;AuthGuard],  \r\n},\r\n];\r\n\r\n@NgModule({\r\n  imports: &#91;RouterModule.forRoot(routes)],\r\n  exports: &#91;RouterModule]\r\n})\r\nexport class AppRoutingModule { }\r\n<\/code><\/pre>\n\n\n\n<p>Now, the user cannot access the homepage unless they are logged in and authenticated.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\n\n\n\n<p>In this article, I showed how the Angular framework provides built in authentication, and showed how to implement it with Guard Rails, the Angular mechanism for determining if a user should be allowed to view a certain application path or not. The process involves:<\/p>\n\n\n\n<ol><li>Generating the authentication service<\/li><li>Creating an implementing a Route Guard<\/li><li>Putting the route guard to use through the <em>canActivate()<\/em> function<\/li><\/ol>\n\n\n\n<p>It\u2019s a bit complex, but once you get the hang of it, you can implement authentication in Angular applications seamlessly and securely.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>What is Angular? Frameworks provide a consistent structure that ensures developers do not have to rebuild code from scratch, significantly improving web development efficiency and performance. They offer various extra<\/p>\n","protected":false},"author":1,"featured_media":44149,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"categories":[4207,4206,73],"tags":[9524,5861,203,15545,2189,176,15547,207,250,5889,433,11813,5873,9652,5888,5879,15544,5890],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Authentication in Angular Apps: A Practical Guide<\/title>\n<meta name=\"description\" content=\"What is Angular? Frameworks provide a consistent structure that ensures developers do not have to rebuild code from scratch, significantly improving web\" \/>\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.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Authentication in Angular Apps: A Practical Guide\" \/>\n<meta property=\"og:description\" content=\"What is Angular? Frameworks provide a consistent structure that ensures developers do not have to rebuild code from scratch, significantly improving web\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/\" \/>\n<meta property=\"og:site_name\" content=\"Daily Business Resources for Entrepreneurs, Web Designers, &amp; Creatives by Andy Sowards\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/facebook.com\/andysowardsfan\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-15T16:42:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-23T01:39:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.andysowards.com\/blog\/assets\/why-angular-is-getting-the-highest-preference-among-developers.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"401\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Andy Sowards\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@andysowards\" \/>\n<meta name=\"twitter:site\" content=\"@andysowards\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andy Sowards\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/\",\"url\":\"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/\",\"name\":\"Authentication in Angular Apps: A Practical Guide\",\"isPartOf\":{\"@id\":\"https:\/\/www.andysowards.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.andysowards.com\/blog\/assets\/why-angular-is-getting-the-highest-preference-among-developers.jpeg\",\"datePublished\":\"2022-09-15T16:42:01+00:00\",\"dateModified\":\"2022-09-23T01:39:27+00:00\",\"author\":{\"@id\":\"https:\/\/www.andysowards.com\/blog\/#\/schema\/person\/2e0f72bd7f6497fd883e2bd67d9f3415\"},\"description\":\"What is Angular? Frameworks provide a consistent structure that ensures developers do not have to rebuild code from scratch, significantly improving web\",\"breadcrumb\":{\"@id\":\"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/#primaryimage\",\"url\":\"https:\/\/www.andysowards.com\/blog\/assets\/why-angular-is-getting-the-highest-preference-among-developers.jpeg\",\"contentUrl\":\"https:\/\/www.andysowards.com\/blog\/assets\/why-angular-is-getting-the-highest-preference-among-developers.jpeg\",\"width\":700,\"height\":401},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.andysowards.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Authentication in Angular Apps: A Practical Guide\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.andysowards.com\/blog\/#website\",\"url\":\"https:\/\/www.andysowards.com\/blog\/\",\"name\":\"Daily Business Resources for Entrepreneurs, Web Designers, &amp; Creatives by Andy Sowards\",\"description\":\"Design Inspiration &amp; Business Resources for Creatives\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.andysowards.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.andysowards.com\/blog\/#\/schema\/person\/2e0f72bd7f6497fd883e2bd67d9f3415\",\"name\":\"Andy Sowards\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.andysowards.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/15f95b011563b5894883b22bd4b32d59?s=96&r=pg\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/15f95b011563b5894883b22bd4b32d59?s=96&r=pg\",\"caption\":\"Andy Sowards\"},\"description\":\"Im a professional Freelancer specializing in Web Developer, Design, Programming web applications. Im an Avid member of the Design\/Development community and a Serial Blogger. follow me on Twitter @AndySowards\",\"sameAs\":[\"https:\/\/www.andysowards.com\"],\"url\":\"https:\/\/www.andysowards.com\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Authentication in Angular Apps: A Practical Guide","description":"What is Angular? Frameworks provide a consistent structure that ensures developers do not have to rebuild code from scratch, significantly improving web","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.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/","og_locale":"en_US","og_type":"article","og_title":"Authentication in Angular Apps: A Practical Guide","og_description":"What is Angular? Frameworks provide a consistent structure that ensures developers do not have to rebuild code from scratch, significantly improving web","og_url":"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/","og_site_name":"Daily Business Resources for Entrepreneurs, Web Designers, &amp; Creatives by Andy Sowards","article_publisher":"http:\/\/facebook.com\/andysowardsfan","article_published_time":"2022-09-15T16:42:01+00:00","article_modified_time":"2022-09-23T01:39:27+00:00","og_image":[{"width":700,"height":401,"url":"https:\/\/www.andysowards.com\/blog\/assets\/why-angular-is-getting-the-highest-preference-among-developers.jpeg","type":"image\/jpeg"}],"author":"Andy Sowards","twitter_card":"summary_large_image","twitter_creator":"@andysowards","twitter_site":"@andysowards","twitter_misc":{"Written by":"Andy Sowards","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/","url":"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/","name":"Authentication in Angular Apps: A Practical Guide","isPartOf":{"@id":"https:\/\/www.andysowards.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/#primaryimage"},"image":{"@id":"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/www.andysowards.com\/blog\/assets\/why-angular-is-getting-the-highest-preference-among-developers.jpeg","datePublished":"2022-09-15T16:42:01+00:00","dateModified":"2022-09-23T01:39:27+00:00","author":{"@id":"https:\/\/www.andysowards.com\/blog\/#\/schema\/person\/2e0f72bd7f6497fd883e2bd67d9f3415"},"description":"What is Angular? Frameworks provide a consistent structure that ensures developers do not have to rebuild code from scratch, significantly improving web","breadcrumb":{"@id":"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/#primaryimage","url":"https:\/\/www.andysowards.com\/blog\/assets\/why-angular-is-getting-the-highest-preference-among-developers.jpeg","contentUrl":"https:\/\/www.andysowards.com\/blog\/assets\/why-angular-is-getting-the-highest-preference-among-developers.jpeg","width":700,"height":401},{"@type":"BreadcrumbList","@id":"https:\/\/www.andysowards.com\/blog\/2022\/authentication-in-angular-apps-a-practical-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.andysowards.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Authentication in Angular Apps: A Practical Guide"}]},{"@type":"WebSite","@id":"https:\/\/www.andysowards.com\/blog\/#website","url":"https:\/\/www.andysowards.com\/blog\/","name":"Daily Business Resources for Entrepreneurs, Web Designers, &amp; Creatives by Andy Sowards","description":"Design Inspiration &amp; Business Resources for Creatives","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.andysowards.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.andysowards.com\/blog\/#\/schema\/person\/2e0f72bd7f6497fd883e2bd67d9f3415","name":"Andy Sowards","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.andysowards.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/15f95b011563b5894883b22bd4b32d59?s=96&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/15f95b011563b5894883b22bd4b32d59?s=96&r=pg","caption":"Andy Sowards"},"description":"Im a professional Freelancer specializing in Web Developer, Design, Programming web applications. Im an Avid member of the Design\/Development community and a Serial Blogger. follow me on Twitter @AndySowards","sameAs":["https:\/\/www.andysowards.com"],"url":"https:\/\/www.andysowards.com\/blog\/author\/admin\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.andysowards.com\/blog\/wp-json\/wp\/v2\/posts\/44141"}],"collection":[{"href":"https:\/\/www.andysowards.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.andysowards.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.andysowards.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.andysowards.com\/blog\/wp-json\/wp\/v2\/comments?post=44141"}],"version-history":[{"count":11,"href":"https:\/\/www.andysowards.com\/blog\/wp-json\/wp\/v2\/posts\/44141\/revisions"}],"predecessor-version":[{"id":44317,"href":"https:\/\/www.andysowards.com\/blog\/wp-json\/wp\/v2\/posts\/44141\/revisions\/44317"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.andysowards.com\/blog\/wp-json\/wp\/v2\/media\/44149"}],"wp:attachment":[{"href":"https:\/\/www.andysowards.com\/blog\/wp-json\/wp\/v2\/media?parent=44141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.andysowards.com\/blog\/wp-json\/wp\/v2\/categories?post=44141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.andysowards.com\/blog\/wp-json\/wp\/v2\/tags?post=44141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}