{"componentChunkName":"component---src-templates-blog-list-template-js","path":"/49","result":{"data":{"allMarkdownRemark":{"edges":[{"node":{"excerpt":"Introduction The last couple of years have been great for OTT (over the top) platforms since the global entertainment and content…","fields":{"slug":"/identity/how-ciam-helps-ott-platforms-scale-million-viewers/"},"html":"<h2 id=\"introduction\" style=\"position:relative;\"><a href=\"#introduction\" aria-label=\"introduction permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Introduction</h2>\n<p>The last couple of years have been great for OTT (over the top) platforms since the global entertainment and content distribution industry witnessed a paradigm shift. </p>\n<p>Admit it, the craze for going out for a movie on the weekend is fading out and is being swiftly replaced by enjoying your favorite series and movies at the comfort of your recliner or even your bed! </p>\n<p>Yes, OTT platforms have revolutionized the entire entertainment industry for good. However, specific challenges pertaining to consumer experience are still the bottlenecks of various OTT service providers.</p>\n<p>One such major challenge among the content distribution channel is to manage the ever-surging demands of the viewers on multiple platforms. </p>\n<p>Today, <a href=\"https://www.loginradius.com/scalability/\">handling billions of identities</a> is a steep climb for media businesses, especially when every viewer demands an omnichannel experience. </p>\n<p>Here’s where an identity management solution can be a game-changer.</p>\n<p>Let’s understand how a consumer identity and access management (CIAM) solution could help OTT platforms to handle scalability-related dilemmas like a breeze. </p>\n<h2 id=\"ciam-and-ott--meant-for-each-other\" style=\"position:relative;\"><a href=\"#ciam-and-ott--meant-for-each-other\" aria-label=\"ciam and ott  meant for each other permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>CIAM and OTT — Meant for Each Other</h2>\n<p>No OTT business can give precise predictions regarding the upsurge in the number of daily signups or subscriptions in today’s era when the internet has become the second home for most of us.</p>\n<p>Thus, businesses need to understand the importance of a robust and scalable CIAM solution that can handle a sudden rush in the number of logins or sign-ups without hampering the user experience.</p>\n<p>With a <a href=\"https://www.loginradius.com/blog/identity/customer-identity-and-access-management/#:~:text=Customer%20identity%20and%20access%20management%20(CIAM)%20is%20a%20digital%20identity,while%20securely%20managing%20customer%20identities.\">CIAM solution</a> like LoginRadius, you can be sure enough to deliver the best user experience to your existing clients and potential subscribers as our cloud infrastructure automatically scales to accommodate swiftly changing loads of data storage, account creation, consumer authentication, new application deployment, and more.</p>\n<p>What’s more? You get the highest level of security through <a href=\"https://www.loginradius.com/blog/identity/assess-improve-your-authentication-system/\">robust authentication</a> mechanisms, including multi-factor authentication, risk-based authentication, and more. </p>\n<h2 id=\"security-isnt-a-luxury-anymore-its-the-absolute-necessity\" style=\"position:relative;\"><a href=\"#security-isnt-a-luxury-anymore-its-the-absolute-necessity\" aria-label=\"security isnt a luxury anymore its the absolute necessity permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Security Isn’t a Luxury Anymore; It’s the Absolute Necessity!</h2>\n<p>Media businesses should understand that offering a great user experience through a highly-scalable infrastructure is crucial but not at the expense of <a href=\"https://www.loginradius.com/blog/identity/poor-login-concurrency-impact-ott-platforms/\">poor login</a> and security. </p>\n<p>Balancing user experience with robust security is the need for OTT platforms since cybercriminals are already targeting consumer identities by exploiting weak layers of security. </p>\n<p>As we know, every OTT platform is handling peak loads as the number of viewers and subscribers is swiftly increasing; stringent security layers should be the top priority. </p>\n<p>Hence, to avoid losses worth millions of dollars and prevent brand tarnishing in the global markets, OTT vendors should immediately consider incorporating smart security mechanisms through a reliable CIAM solution.  </p>\n<h2 id=\"why-is-loginradius-the-perfect-companion-for-ott-platforms\" style=\"position:relative;\"><a href=\"#why-is-loginradius-the-perfect-companion-for-ott-platforms\" aria-label=\"why is loginradius the perfect companion for ott platforms permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Why is LoginRadius the Perfect Companion for OTT Platforms?</h2>\n<p>Our infrastructure auto-scales to accommodate the rapid growth of your customer base. LoginRadius ensures that your expansion has no limitations with no cap on users.</p>\n<p>Moreover, the <a href=\"https://www.loginradius.com/\">LoginRadius Identity Platform</a> auto-scales to handle hundreds of applications, whether web, mobile, smart TV, gaming console—and the list goes on.</p>\n<p>Here are some reasons why OTT platforms must choose LoginRadius as their identity provider: </p>\n<ul>\n<li><strong>Auto-scalable infrastructure:</strong>  LoginRadius empowers businesses to deliver a secure and delightful user experience to their clients through its comprehensive and scalable consumer identity and secure access management platform. With 100% uptime and 35 data centers across the globe, LoginRadius’ cloud-based platform can <a href=\"https://www.loginradius.com/blog/identity/handling-scalability-security-loginradius/\">scale to 100s of millions of users</a> in a couple of seconds.</li>\n<li><strong>Low-friction user registration:</strong> LoginRadius offers flexible account setup choices like standard login, social login, and self-serve registration for hassle-free entry into your web or mobile application.</li>\n<li><strong>Multi-factor authentication (MFA):</strong> LoginRadius offers identity management for developers by making it easier to safeguard consumer data with extra protection layers. The CIAM provider allows a plethora of authentication methods, including phone calls, SMS/text messages, email verification, time-based code, hardware token, security questions, biometrics, Google Authenticator, etc., each time they want to access their accounts.</li>\n<li><strong>Single sign-on (SSO):</strong> SSO can provide easy access to multiple websites or applications using a single set of credentials. Developers can connect with external identity providers by implementing OAuth 2.0, SAML, or OpenID Connect standards. LoginRadius offers different ways to integrate web, mobile, and <a href=\"https://www.loginradius.com/federated-sso/\">federated SSO</a>.</li>\n<li><strong>Compliance management:</strong> Developers can add authorization policies through LoginRadius. The CIAM provider is well compliant with formal data protection regulations across the globe, like the EU's GDPR and California's CCPA.</li>\n</ul>\n<h2 id=\"final-thoughts\" style=\"position:relative;\"><a href=\"#final-thoughts\" aria-label=\"final thoughts permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Final Thoughts</h2>\n<p>OTT platforms have witnessed a tremendous increase in the number of users and subscribers in the past couple of years, and hence, securing massive user information becomes an uphill battle for vendors. </p>\n<p>Moreover, the ever-expanding demands of subscribers can only be fulfilled through an auto-scalable infrastructure that guarantees security and manages peak loads without any hassle. </p>\n<p>The LoginRadius CIAM offers robust security and a rich user experience to OTT platforms with real-time auto-scalable infrastructure that automatically scales depending on the users’ demands. </p>\n<p><a href=\"https://www.loginradius.com/book-a-demo/\"><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsSAAALEgHS3X78AAABdElEQVQY002RO0/CUBzFG6PtbZWHCAmRmBB5P8vDII9SSC0omog4oAEGjZMO6OKEuLjoJ2Fx0cSBwUQnXZxcHPwux38LJA7nNvfec8+5v1tOCCiwpbbhye2BxbYgBMtgIRVioDRRsARGXxZUzLlEHmehBaesQ4rrEMPViYf2DR9nDGKkChbVICVqsMt1WJI1sHCFwhUsUIFohJH49TxECvRUjhDW2mAbB5iP6hB8hUkhiRPN5KIZYJdrsEYrcCSpmQqMm6/m9ylUhSulY7N5ivROB3L9GOlGF3Ktbc4zuz341UPw/uIk0ESbBjoSGlYIx8BfzjSwVmyCEYEUUmCPa3Bnd+hwC75yC95S05SxbolU/iEbOCFCpDexEfIioTNCNd6Tp6IlMnNuGeeDe3z//OLx5RWj5zFGT2O8fXxh/P4Ja6w6vSEFCnTIlW2YiDzhzX7ATFKojDlvjpBPcDF4QPdyiG5/iE7/BmfXd+hd3VKpCoG8fzxWw2+c+yTpAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"book-a-demo-loginradius\"\n        title=\"book-a-demo-loginradius\"\n        src=\"/static/fcc4c4b5dc38cc4528f99d09480f4eb2/e5715/book-a-demo-loginradius.png\"\n        srcset=\"/static/fcc4c4b5dc38cc4528f99d09480f4eb2/a6d36/book-a-demo-loginradius.png 650w,\n/static/fcc4c4b5dc38cc4528f99d09480f4eb2/e5715/book-a-demo-loginradius.png 768w,\n/static/fcc4c4b5dc38cc4528f99d09480f4eb2/63ff0/book-a-demo-loginradius.png 2887w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></a></p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"March 07, 2022","updated_date":null,"description":"Today, handling billions of identities is a steep climb for media businesses, especially when every viewer demands an omnichannel experience. Let’s understand how a consumer identity and access management solution could help OTT platforms to handle scalability-related dilemmas like a breeze.","title":"OTT Platforms and CIAM: How Identity Management Ensures Millions of Viewers to Scale with Ease","tags":["security"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.5625,"src":"/static/19efd284c4e1d8497f857ad6f665a66d/33aa5/ciam-ott.jpg","srcSet":"/static/19efd284c4e1d8497f857ad6f665a66d/f836f/ciam-ott.jpg 200w,\n/static/19efd284c4e1d8497f857ad6f665a66d/2244e/ciam-ott.jpg 400w,\n/static/19efd284c4e1d8497f857ad6f665a66d/33aa5/ciam-ott.jpg 768w","sizes":"(max-width: 768px) 100vw, 768px"}}},"author":{"id":"Rakesh Soni","github":"oyesoni","avatar":"rakesh-soni.jpg"}}}},{"node":{"excerpt":"Github is great, as you may already know. But, did you ever think to make your profile attractive for potential employers, followers…","fields":{"slug":"/engineering/build-your-github-profile/"},"html":"<p>Github is great, as you may already know.</p>\n<p>But, did you ever think to make your profile attractive for potential employers, followers, recruiters, and visitors?</p>\n<p>Let's make a better version of it.</p>\n<h2 id=\"github-profile-image-frame\" style=\"position:relative;\"><a href=\"#github-profile-image-frame\" aria-label=\"github profile image frame permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Github Profile Image Frame</h2>\n<p>It's up to you to decide how you want this frame — photo-less, cartoon avatar, or best explaining image.</p>\n<p>For the best image, take a quality click; quality means not blurred, perfect lighting, and good posture.\nIf someone looks at the photo, it shall explain your personality.</p>\n<h2 id=\"github-profile-page\" style=\"position:relative;\"><a href=\"#github-profile-page\" aria-label=\"github profile page permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Github Profile Page</h2>\n<p>Github has a <a href=\"https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/managing-your-profile-readme\">feature called README</a> if you do not know already.</p>\n<p>Check out some listing of <a href=\"https://github.com/abhisheknaiidu/awesome-github-profile-readme\">awesome GitHub profiles</a>.</p>\n<p>To start this, first, you need to create a project that is the same as your GitHub username.</p>\n<p><strong>Example:</strong> My user name is <code>abhir9</code>, and I need to create a repo with the same name <code>abhir9</code> with a <code>README.md</code> file.</p>\n<p>This <code>README.me</code> will act as the profile page: <a href=\"https://github.com/abhir9\">abhir9</a></p>\n<p>It is the actual README file created using a repo with my GitHub username: <a href=\"https://github.com/abhir9/abhir9/blob/main/README.md\">abhir9</a></p>\n<p>Here you can add your quotes, hello statement, greetings, etc. It is connected to the viewer on your behalf.</p>\n<p>So write a short paragraph or a brief story to introduce yourself.</p>\n<p>There are some apps from contributors that extract the information based on your profile name and share stats and charts.</p>\n<ul>\n<li><a href=\"https://github-readme-stats.vercel.app\">github readme stats</a>\ne.g.: <code>https://github-readme-stats.vercel.app/api?username=abhir9&#x26;show_icons=true&#x26;count_private=true&#x26;theme=react</code></li>\n<li><a href=\"https://readme-typing-svg.herokuapp.com\">readme typing svg</a>\ne.g.: <code>https://readme-typing-svg.herokuapp.com?size=50&#x26;center=true&#x26;vCenter=true&#x26;width=800&#x26;height=100&#x26;lines=Namaste%20%F0%9F%99%8F%3BPranam%20%F0%9F%99%8F%3BKhamma%20Ghani%20%F0%9F%99%8F%3BVanakkam%20%F0%9F%99%8F%3BSat%20Sri%20Akaal%20%F0%9F%99%8F%3BAssalam%20Alaikum%20%F0%9F%99%8F%3B</code></li>\n<li><a href=\"https://views.whatilearened.today\">whatilearened</a>\ne.g.: <code>https://views.whatilearened.today/views/github/abhir9/abhir9.svg?cache=remove</code></li>\n<li><a href=\"https://github-readme-streak-stats.herokuapp.com\">github readme streak stats</a>\ne.g.: <code>https://github-readme-streak-stats.herokuapp.com/?user=abhir9&#x26;theme=react</code></li>\n<li>SVG Icons\ne.g.: <code>https://raw.githubusercontent.com/devicons/devicon/master/icons/ubuntu/ubuntu-plain.svg</code></li>\n</ul>\n<p>Many other online apps can be used per your need — e.g., how you want to decorate your profile page.</p>\n<h2 id=\"github-pinned-repos\" style=\"position:relative;\"><a href=\"#github-pinned-repos\" aria-label=\"github pinned repos permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Github Pinned Repos</h2>\n<p>Github allows you to pin up to 6 repos.</p>\n<p>Try to pin the best of your projects' repos. Mostly, people do visit these repos if they land on your profiles.</p>\n<h2 id=\"greeny-contributions\" style=\"position:relative;\"><a href=\"#greeny-contributions\" aria-label=\"greeny contributions permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Greeny Contributions</h2>\n<p>There is a heat map that represents your contributions.</p>\n<p>Heat map graph will automatically generate as per your contributions. Try to keep it greener by contributing usefully to your favorite projects.</p>\n<h2 id=\"readme-for-every-project\" style=\"position:relative;\"><a href=\"#readme-for-every-project\" aria-label=\"readme for every project permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>README for Every Project</h2>\n<p>Whether it's a minor or significant project, add a well-descriptive README file. It helps anyone clearly understand what your project does and how they can contribute if they want to.</p>\n<p>Format it in a better way; if you don't know very much about Markdown format, you can use an online tool like <a href=\"https://pandao.github.io/editor.md/en.html\">Pandao</a></p>\n<p>You can use images, screenshots, gifs, resources list, contribution guidelines, license, etc.</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"February 28, 2022","updated_date":null,"description":"Your GitHub profile is vital in showcasing your programming skills. Learn how you can leverage GitHub profile to showcase your skills and expertise.","title":"How to Build Your Github Profile","tags":["Github"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.5037593984962405,"src":"/static/91552ab64061624f85043adb83cc0973/ee604/index.png","srcSet":"/static/91552ab64061624f85043adb83cc0973/69585/index.png 200w,\n/static/91552ab64061624f85043adb83cc0973/497c6/index.png 400w,\n/static/91552ab64061624f85043adb83cc0973/ee604/index.png 800w,\n/static/91552ab64061624f85043adb83cc0973/f3583/index.png 1200w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Abhimanyu Singh Rathore","github":"abhir9","avatar":null}}}},{"node":{"excerpt":"As human interactions become more and more digitalized, your business and personal websites have become far more important than a couple of…","fields":{"slug":"/engineering/importance-of-search-functionality-for-websites/"},"html":"<p>As human interactions become more and more digitalized, your business and personal websites have become far more important than a couple of decades ago.</p>\n<p>When a user lands on your website, it's essential to help the user find the right information as effectively as possible. Otherwise, the user may leave the website, losing potential business opportunities or visibility.</p>\n<p>One of the important ways to improve website design and help users find the information they want is to make the site searchable using the search functionality. It enables users to find content by searching for particular words without understanding or exploring the entire website or app, a quick or less complex way to find content.</p>\n<p>Let's discuss why your website needs to have search functionality and its benefits.</p>\n<h2 id=\"eliminate-site-navigation-hustle\" style=\"position:relative;\"><a href=\"#eliminate-site-navigation-hustle\" aria-label=\"eliminate site navigation hustle permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Eliminate Site Navigation Hustle</h2>\n<p>If you have a large site -- assuming an e-commerce website or having hundreds of pages, users could find it extremely challenging to navigate to what they're looking for. In this situation, a search box allows your users to see what they need with a quick search.</p>\n<p>Regardless of where each user lands on your website, a search box will help them quickly find specific topics or pages.</p>\n<h2 id=\"improve-user-engagement-and-reduce-bounce-rate\" style=\"position:relative;\"><a href=\"#improve-user-engagement-and-reduce-bounce-rate\" aria-label=\"improve user engagement and reduce bounce rate permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Improve User Engagement and Reduce Bounce Rate</h2>\n<p>Simply, the more straightforward it is for users to navigate around your entire website, the more probable that they will explore it.</p>\n<p>If it's difficult for users to track down what they're looking for, they'll head off to somewhere else that can fulfill their requirements. Help your users engage quite a bit on your site with a search textbox.</p>\n<h2 id=\"take-advantage-of-search-functionality\" style=\"position:relative;\"><a href=\"#take-advantage-of-search-functionality\" aria-label=\"take advantage of search functionality permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Take Advantage of Search Functionality</h2>\n<p>Assuming you can incorporate your search bar into your Google Analytics, you'll have the option to track how frequently individuals look for a specific term. You can utilize this data for on-page content, order details, or billing plans.</p>\n<p>For example, if the most searched item on your website is <em>Perfume</em>, you could create a separate section or link on the home page so that users can directly navigate to that item faster.</p>\n<h2 id=\"mobile-users-prefer-search\" style=\"position:relative;\"><a href=\"#mobile-users-prefer-search\" aria-label=\"mobile users prefer search permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Mobile Users Prefer Search</h2>\n<p>In this mobile era, it's critical to ensure your site and applications are mobile-friendly. Whenever users are on their mobile phones, they could be out and in a hurry, and a search feature will allow them to search and navigate to a specific page rapidly.</p>\n<h2 id=\"its-a-distinct-feature-users-expect\" style=\"position:relative;\"><a href=\"#its-a-distinct-feature-users-expect\" aria-label=\"its a distinct feature users expect permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>It's A Distinct Feature Users Expect</h2>\n<p>People are habitual to using some features to the level that they don't think much before using them. Search functionality is one of them. In this digital world, you can't have a site that doesn't offer an ideal user experience. Keep in mind that this minor component can significantly help increase your website’s engagement rates.</p>\n<h2 id=\"helps-improve-branding\" style=\"position:relative;\"><a href=\"#helps-improve-branding\" aria-label=\"helps improve branding permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Helps Improve Branding</h2>\n<p>As the number of site visits increases, it indicates an improvement in brand engagement. Users visit your site because they are happy with the information and experience. This helps to raise your brand image among other competitors in your market.</p>\n<h2 id=\"reinforce-seo\" style=\"position:relative;\"><a href=\"#reinforce-seo\" aria-label=\"reinforce seo permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Reinforce SEO</h2>\n<p>A positive user experience will lead to more visits to your site. As the visitors' count and time spent on your website increase, search engines like Google will consider your website performing well and of good quality, which will further elevate your page rankings in search results.</p>\n<p>You will also find some new keywords from users' searches to search for similar or different information on Google or other search engines. These search keywords can be those words that you want to target in SEO and other marketing and search strategies.</p>\n<h2 id=\"boosts-growth\" style=\"position:relative;\"><a href=\"#boosts-growth\" aria-label=\"boosts growth permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Boosts Growth</h2>\n<p>As you expand your website with new content, blog posts, or new products, it can make your website cumbersome and affect user experience. Accordingly, finding an exact item can become difficult. However, with the right site search strategy, website size or navigation does not hamper the user experience. Users can find what they need and get ideas for other related items.</p>\n<h2 id=\"conclusion\" style=\"position:relative;\"><a href=\"#conclusion\" aria-label=\"conclusion permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Conclusion</h2>\n<p>In a nutshell, search functionality on your website helps offer a smooth, consistent experience for your users. And a well-implemented search functionality has more potential to ensure the website's success.</p>\n<p>Try not to stop your users from exploring all the features your site offers; add search functionality to your site soon!</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"February 24, 2022","updated_date":null,"description":"Adding a search functionality is important for any website to improve user experience. Read more to understand the benefits of enabling search on your website.","title":"Why Implement Search Functionality for Your Websites","tags":["Search"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.5037593984962405,"src":"/static/3591f20e84a98d932a7c1fa348532e41/ee604/search-functionality.png","srcSet":"/static/3591f20e84a98d932a7c1fa348532e41/69585/search-functionality.png 200w,\n/static/3591f20e84a98d932a7c1fa348532e41/497c6/search-functionality.png 400w,\n/static/3591f20e84a98d932a7c1fa348532e41/ee604/search-functionality.png 800w,\n/static/3591f20e84a98d932a7c1fa348532e41/f3583/search-functionality.png 1200w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Neha Vyas","github":"nehavyasqa","avatar":null}}}},{"node":{"excerpt":"We're in an era where the number of machine identities has already surpassed the number of human identities, which isn’t something that…","fields":{"slug":"/identity/rise-of-machine-identity-m2m-authorization-role/"},"html":"<p>We're in an era where the number of machine identities has already surpassed the number of human identities, which isn’t something that should be ignored from a security perspective. </p>\n<p>Whether we talk about an IoT ecosystem containing millions of interconnected devices or application programs continuously seeking access to crucial data from devices and other apps, machine identity security is swiftly becoming the need of the hour. </p>\n<p>What’s more worrisome is that cybercriminals are always on the hunt to exploit a loophole in the overall security mechanism in the digital world where machine-to-machine communication is the new normal. </p>\n<p>Hence, it’s no longer enough to reassure or assume services/devices accessing sensitive data can be trusted since a breach or sneak into the network in real-time processing can go undetected for months or even years, causing losses worth millions of dollars. </p>\n<p>Here’s where the critical role of <a href=\"https://www.loginradius.com/blog/identity/loginradius-m2m-authorization-data-access/\">machine-to-machine (M2M) authorization</a> comes into play. </p>\n<p>Let’s understand how M2M authentication works and paves the path for the secure machine to machine and machine to application interactions without human interventions. </p>\n<h2 id=\"what-is-machine-identity-why-does-security-matter-now-more-than-ever\" style=\"position:relative;\"><a href=\"#what-is-machine-identity-why-does-security-matter-now-more-than-ever\" aria-label=\"what is machine identity why does security matter now more than ever permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is Machine Identity? Why Does Security Matter Now More than Ever?</h2>\n<p>Just like humans have a unique identity and characteristics that define a particular individual, machines have their identities that help govern the integrity and confidentiality of information between different systems. </p>\n<p>Machines leverage keys and certificates to assure their unique identities while accessing information or gaining access to specific applications or devices. </p>\n<p>Today, business systems undergo complex interactions and communicate autonomously to execute business functions. Every day, millions of devices constantly gather and report data, especially concerning the Internet of Things (IoT) ecosystem, which doesn’t even require human intervention.</p>\n<p>However, adding stringent layers of security isn’t a piece of cake at such a micro-level. Hence, cybercriminals are always looking for a loophole to sneak into a network and exploit crucial information. </p>\n<p>Hence, these systems need to efficiently and securely share this data during transit to the suitable systems and issue operational instructions without room for tampering.</p>\n<p>A robust machine-to-machine (M2M) communication mechanism can be a game-changer concerning the ever-increasing <a href=\"https://www.loginradius.com/blog/identity/cloud-computing-security-challenges/\">security risks and challenges</a>. </p>\n<h2 id=\"what-is-machine-to-machine-authorization\" style=\"position:relative;\"><a href=\"#what-is-machine-to-machine-authorization\" aria-label=\"what is machine to machine authorization permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is Machine-to-Machine Authorization?</h2>\n<p>Machine-to-machine (M2M) authorization ensures that business systems communicate autonomously without human intervention and access the needed information through granular-level access.</p>\n<p>M2M Authorization is exclusively used for scenarios in which a business system authenticates and authorizes a service rather than a user.</p>\n<p>M2M Authorization provides remote systems with secure access to information. Using M2M Authorization, business systems can communicate autonomously and execute business functions based on predefined authorization.</p>\n<p><a href=\"https://www.loginradius.com/resource/m-to-m-authorization-\"><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsSAAALEgHS3X78AAABn0lEQVQY01XOzWoTURjG8amT+WobJ5lkmpnJdJImmYyZNpqYD1uL7aLqWimldKNIEdooQhFX4u3oSl1YwYIgXYhegCDUTxBcWCKhvYC/J8nKA8/ivLzvj0cyqssY4WX08iWMUpfJcgdjri3Swig00IILqLN1VH8exY3QxCxVX8Es1lHEXHZCEtkCiUyAbPlIQ2wYy484a86gTabRDZMpM0cqVyIZLKD4C6j5GMURYLGJ171OtLiGVruCHJwfYf+BemWJbL6CM+NhZz1UNUWitIZSW8cImgIU7bwY3Y9x4i65qEU2bOJWG7jRRaZFmTNpfwzqlcVxQ7eMmbTI5AqYfpPMcg9rZY9ktCra1QRYw5idx446uAL14g7OuRZ22GA6Xx1hcjo/bLhEotjm2cvX9I+POfrylW/ff/Lj12/+/D1h9eYtJDtEMgN2Hz3h0+cjnu8f8PTFK3Gzz+H7j7x5+44pryx2nDEoBy0ODj8wfP1+n8FgwOnpyeh/beMOklViwq7QvnqDnYeP2br7gM3t+yL3uN3bY2u7h2YXmEi5/AObCM5rWlEs6wAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"DS-m2m-auth\"\n        title=\"DS-m2m-auth\"\n        src=\"/static/5333b92e3e9f12f1f05e1a63df46799f/e5715/DS-m2m-auth.png\"\n        srcset=\"/static/5333b92e3e9f12f1f05e1a63df46799f/a6d36/DS-m2m-auth.png 650w,\n/static/5333b92e3e9f12f1f05e1a63df46799f/e5715/DS-m2m-auth.png 768w,\n/static/5333b92e3e9f12f1f05e1a63df46799f/81501/DS-m2m-auth.png 2886w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></a></p>\n<h2 id=\"why-do-businesses-need-m2m-authorization\" style=\"position:relative;\"><a href=\"#why-do-businesses-need-m2m-authorization\" aria-label=\"why do businesses need m2m authorization permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Why Do Businesses Need M2M Authorization?</h2>\n<p>Since we’re now relying on smart interconnected devices more than ever before, secure data transfer is undeniably a massive challenge for businesses and vendors offering smart devices and applications. </p>\n<p>Moreover, these smart devices and applications continuously demand access from other devices and applications, which doesn’t involve any humans; the underlying risks and security threats increase. </p>\n<p>IT leaders and information security professionals can’t keep an eye on things at this micro-level, which is perhaps the reason why there’s an immediate need for a robust mechanism that can handle machine-to-machine communication and ensure the highest level of security. </p>\n<p>Apart from this, businesses also need to focus on improving the overall user experience since adding stringent <a href=\"https://www.loginradius.com/multi-factor-authentication/\">layers of security</a> eventually hampers user experience. </p>\n<p>Here’s where a reliable CIAM (<a href=\"https://www.loginradius.com/blog/identity/customer-identity-and-access-management/#:~:text=Customer%20identity%20and%20access%20management%20(CIAM)%20is%20a%20digital%20identity,while%20securely%20managing%20customer%20identities.\">consumer identity and access management</a>) solution like LoginRadius comes into play. </p>\n<h2 id=\"how-loginradius-cutting-edge-ciam-offers-seamless-m2m-authorization\" style=\"position:relative;\"><a href=\"#how-loginradius-cutting-edge-ciam-offers-seamless-m2m-authorization\" aria-label=\"how loginradius cutting edge ciam offers seamless m2m authorization permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How LoginRadius’ Cutting-Edge CIAM Offers Seamless M2M Authorization?</h2>\n<p>LoginRadius M2M helps businesses to provide flexible machine-to-machine communication while ensuring granular access, authorization, and security requirements are enforced.</p>\n<p>LoginRadius’ M2M Authorization offers secure access to improve business efficiency and ultimately enhances customer experience. M2M provides several business benefits, including, but not limited to:</p>\n<ul>\n<li>Seamless user experience backed with robust security</li>\n<li>Efficient authentication and data exchange</li>\n<li>Grant, limit, or block access permissions at any time</li>\n<li>Secure data access across multiple business systems</li>\n<li>Granular data access with predefined scopes</li>\n</ul>\n<h2 id=\"final-thoughts\" style=\"position:relative;\"><a href=\"#final-thoughts\" aria-label=\"final thoughts permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Final Thoughts</h2>\n<p>With the rise of smart devices, the rising threat of machine <a href=\"https://www.loginradius.com/blog/identity/identity-theft-frauds/\">identity theft</a> is increasing among developers and vendors offering these services. </p>\n<p>Organizations need to understand the complexity of the situation and put their best efforts into incorporating a smart security mechanism that can carry out machine-to-machine authorization tasks like a breeze. </p>\n<p><a href=\"https://www.loginradius.com/\">LoginRadius’</a> cutting-edge CIAM offers the best-in-class M2M authorization that helps businesses grow without compromising overall security. </p>\n<p><a href=\"https://www.loginradius.com/book-a-demo/\"><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsSAAALEgHS3X78AAABdElEQVQY002RO0/CUBzFG6PtbZWHCAmRmBB5P8vDII9SSC0omog4oAEGjZMO6OKEuLjoJ2Fx0cSBwUQnXZxcHPwux38LJA7nNvfec8+5v1tOCCiwpbbhye2BxbYgBMtgIRVioDRRsARGXxZUzLlEHmehBaesQ4rrEMPViYf2DR9nDGKkChbVICVqsMt1WJI1sHCFwhUsUIFohJH49TxECvRUjhDW2mAbB5iP6hB8hUkhiRPN5KIZYJdrsEYrcCSpmQqMm6/m9ylUhSulY7N5ivROB3L9GOlGF3Ktbc4zuz341UPw/uIk0ESbBjoSGlYIx8BfzjSwVmyCEYEUUmCPa3Bnd+hwC75yC95S05SxbolU/iEbOCFCpDexEfIioTNCNd6Tp6IlMnNuGeeDe3z//OLx5RWj5zFGT2O8fXxh/P4Ja6w6vSEFCnTIlW2YiDzhzX7ATFKojDlvjpBPcDF4QPdyiG5/iE7/BmfXd+hd3VKpCoG8fzxWw2+c+yTpAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"book-a-demo-loginradius\"\n        title=\"book-a-demo-loginradius\"\n        src=\"/static/fcc4c4b5dc38cc4528f99d09480f4eb2/e5715/book-a-demo-loginradius.png\"\n        srcset=\"/static/fcc4c4b5dc38cc4528f99d09480f4eb2/a6d36/book-a-demo-loginradius.png 650w,\n/static/fcc4c4b5dc38cc4528f99d09480f4eb2/e5715/book-a-demo-loginradius.png 768w,\n/static/fcc4c4b5dc38cc4528f99d09480f4eb2/63ff0/book-a-demo-loginradius.png 2887w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></a></p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"February 24, 2022","updated_date":null,"description":"Cybercriminals are always on the hunt to exploit a loophole in the overall security mechanism in the digital world where machine-to-machine communication is the new normal. It’s no longer enough to assume services/devices accessing sensitive data can be trusted.","title":"Is the Rise of Machine Identity Posing a Threat to Enterprise Security?","tags":["data security","authorization","ciam solution"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.639344262295082,"src":"/static/9b386dcd78c0b062fdb1518d5e681d29/33aa5/machine-id.jpg","srcSet":"/static/9b386dcd78c0b062fdb1518d5e681d29/f836f/machine-id.jpg 200w,\n/static/9b386dcd78c0b062fdb1518d5e681d29/2244e/machine-id.jpg 400w,\n/static/9b386dcd78c0b062fdb1518d5e681d29/33aa5/machine-id.jpg 768w","sizes":"(max-width: 768px) 100vw, 768px"}}},"author":{"id":"Rakesh Soni","github":"oyesoni","avatar":"rakesh-soni.jpg"}}}},{"node":{"excerpt":"Introduction Consumers in the ever-expanding digital world demand rich experiences at every touchpoint, which is perhaps the reason why…","fields":{"slug":"/growth/how-retailers-balance-security-ux/"},"html":"<h2 id=\"introduction\" style=\"position:relative;\"><a href=\"#introduction\" aria-label=\"introduction permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Introduction</h2>\n<p>Consumers in the ever-expanding digital world demand rich experiences at every touchpoint, which is perhaps the reason why retailers should stress the importance of offering a flawless experience to their users. </p>\n<p>However, <a href=\"https://www.loginradius.com/customer-experience-solutions/\">user experience</a> without the reinforcement of stringent security is of no use. And businesses should focus on delivering a perfect harmony of user experience and security. </p>\n<p>Consumers are well aware that their identity and personal information’s security matters, and it’s the vendor's responsibility to have adequate security measures to safeguard their digital identity. </p>\n<p><a href=\"https://www.statista.com/statistics/786778/worldwide-fraud-detection-and-prevention-market-size/\">Stats</a> reveal the fraud detection and prevention (FDP) market is estimated to soar at 63 billion U.S. dollars in 2023, which was 19.5 billion U.S. dollars back in 2019. </p>\n<p>Yes, if a retail business needs to stand ahead of the curve, it must leverage cutting-edge technology that helps them attract users that convert into buyers without any friction. </p>\n<p>Here’s where the role of identity management comes into play! </p>\n<p><a href=\"https://www.loginradius.com/industry-retail-and-ecommerce/\">Identity management in the retail industry</a> is a seamless, secure, and scalable solution to identify and protect customer data and ensure that they can easily access any information they need.</p>\n<p>Let’s uncover the critical role of identity management in the retail industry and how businesses can scale growth without compromising consumer identities. </p>\n<h2 id=\"what-is-identity-management-why-does-it-matter-in-the-retail-industry\" style=\"position:relative;\"><a href=\"#what-is-identity-management-why-does-it-matter-in-the-retail-industry\" aria-label=\"what is identity management why does it matter in the retail industry permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is Identity Management? Why does it matter in the Retail Industry?</h2>\n<p>Identity management in cybersecurity refers to the security framework and disciplines for managing digital identities. It regulates the responsibilities and access privileges associated with individual consumers and the conditions in which such privileges are allowed or denied.</p>\n<p>Organizations can use identity management solutions to detect unauthorized access privileges, validations, or policy violations under a single system. Moreover, they can also ensure that the organization meets necessary regulatory and audit requirements.</p>\n<p>When it comes to the retail industry, businesses can’t ignore the endless possibilities with an identity management solution that thrives on business success. Here’s what identity management in the retail industry offers: </p>\n<ul>\n<li>Ensures security compliance</li>\n<li>Eliminates duplicate identity data</li>\n<li>Simplifies the customer registration process</li>\n<li>Creates a unified customer profile</li>\n<li>Collects more customer purchase and interaction data</li>\n<li>Stores customer data in a secure cloud directory.</li>\n</ul>\n<p>When combined, these aspects could do wonders for retailers by improving user experience from the moment a user interacts with their brand and enhancing conversions. </p>\n<p>These are opportunities ready to be grabbed. But are retailers ready to incorporate identity management into their workflow? If not, it is high time that they should.</p>\n<p><strong><a href=\"https://www.loginradius.com/resource/how-retail-and-consumer-goods-companies-use-loginradius-identity-solution/\"><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsSAAALEgHS3X78AAABg0lEQVQY01WRyy8DURTGJzQ6VaHepUqGUm2HilZn0od22klbjzaRRigVEishZWPltbDhHxEriUgIGyGRsLGzsChaEexV7T53hvG4yZdzzz3n/u4551KaDi8UlRJpzT7ZKv7fOG1yo9QWRA0/guruEDSsCLrTD7rd8xUnllKS9fYQ9F0CdGYPaqx+NDkHUNstopIVfi8QoJZAmoUkrOIYtFwC6q4INCROf3NkoJocMNwguGgSzvA4eoIJVLNBaC1BVNgCMlBSuTUAIzeERkcE9b0R8mgUjDuGOrJXmzz/gayQQCy1AF98Gg5xFCbvCMyhJGrt4g+wzNKPBlJ5E4Ea+WEYXATeN4gq0r7SBSXNScXw2Ds6xUehgLv7LLK5Rzy/vOIt/47w5AKKWlygDL2YW9nCzW1Gzt3ZP8buwQnOLq9xcn4FHRlNSZubAMknFDMcDk8vIK3s4xMyDzkCy8t+dCoNyuiEqpUHF5/B/Oo2UovrmEivYjK9htnlTUwtbcjVS51+Ap/X3+BEUHDXAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"retailers-ds\"\n        title=\"retailers-ds\"\n        src=\"/static/5972a16840ccb0ef43ea7593d06d09f8/e5715/retailers-ds.png\"\n        srcset=\"/static/5972a16840ccb0ef43ea7593d06d09f8/a6d36/retailers-ds.png 650w,\n/static/5972a16840ccb0ef43ea7593d06d09f8/e5715/retailers-ds.png 768w,\n/static/5972a16840ccb0ef43ea7593d06d09f8/63ff0/retailers-ds.png 2887w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></a></strong></p>\n<h2 id=\"how-does-a-consumer-identity-and-access-management-ciam-solution-help-retailers\" style=\"position:relative;\"><a href=\"#how-does-a-consumer-identity-and-access-management-ciam-solution-help-retailers\" aria-label=\"how does a consumer identity and access management ciam solution help retailers permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>How Does a Consumer Identity and Access Management (CIAM) Solution Help Retailers?</h2>\n<h3 id=\"1-robust-security\" style=\"position:relative;\"><a href=\"#1-robust-security\" aria-label=\"1 robust security permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. Robust security</h3>\n<p>Poor security and data management are the most underestimated aspects that badly impact sales and tarnish brand reputation.</p>\n<p>Online retailers that cannot protect consumer identity and personal information are prone to losing loyal consumers and would undoubtedly fail to attract potential customers.</p>\n<p>Adding stringent layers of security is a must for any retailer seeking substantial growth in the ever-expanding competitive business landscape.</p>\n<p>Whether it’s multi-factor authentication (MFA) or <a href=\"https://www.loginradius.com/blog/identity/risk-based-authentication/\">risk-based authentication</a> (RBA), enterprises need to adopt advanced security measures to safeguard consumer information to prevent financial and reputational losses.</p>\n<h3 id=\"2-multichannel-buying-experience\" style=\"position:relative;\"><a href=\"#2-multichannel-buying-experience\" aria-label=\"2 multichannel buying experience permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>#2. Multichannel buying experience</h3>\n<p>Modern consumers always expect a multichannel experience where they’re catered with the services across different touchpoints.</p>\n<p>Moreover, consumers balance offline and online shopping by spending a good time researching to buy a particular product at the best price.</p>\n<p>Now the ball would certainly be in the court of the retailers and e-commerce owners who offer seamless experience right from the beginning.</p>\n<p>This means the consumer, if onboarded rightly, would certainly finalize a purchase if they are served with the right product at the right time and the right place.</p>\n<h3 id=\"3-shoppers-insights\" style=\"position:relative;\"><a href=\"#3-shoppers-insights\" aria-label=\"3 shoppers insights permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>#3. Shoppers’ insights</h3>\n<p>One way to increase brand loyalty is by combining a 360-degree view of the customer demographics with their behavior and personal preferences. This helps retailers and e-commerce owners tweak how they interact with their brands.</p>\n<p>With a CIAM in place, retailers can derive valuable insights from shoppers’ data that can be further utilized to create winning strategies that pave the path for more conversions and lead generations. </p>\n<p>Hence, centrally managed identities can primarily enhance the customer experience and build better relationships.</p>\n<h2 id=\"the-bottom-line\" style=\"position:relative;\"><a href=\"#the-bottom-line\" aria-label=\"the bottom line permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The Bottom Line</h2>\n<p>With consumers demanding an excellent user experience backed with adequate security, incorporating a cutting-edge identity management solution is swiftly becoming the need of the hour for retailers. </p>\n<p>Moreover, to meet the stringent <a href=\"https://www.loginradius.com/compliances/\">data regulations and compliances</a> across the globe, businesses can’t overlook the importance of a reliable CIAM. </p>\n<p>A consumer identity and access management (CIAM) solution can help retailers meet their security and user experience-related requirements like a breeze without compromising compliances and regulations. </p>\n<p><a href=\"https://www.loginradius.com/book-a-demo/\"><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 30.307692307692307%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsSAAALEgHS3X78AAABdElEQVQY002RO0/CUBzFG6PtbZWHCAmRmBB5P8vDII9SSC0omog4oAEGjZMO6OKEuLjoJ2Fx0cSBwUQnXZxcHPwux38LJA7nNvfec8+5v1tOCCiwpbbhye2BxbYgBMtgIRVioDRRsARGXxZUzLlEHmehBaesQ4rrEMPViYf2DR9nDGKkChbVICVqsMt1WJI1sHCFwhUsUIFohJH49TxECvRUjhDW2mAbB5iP6hB8hUkhiRPN5KIZYJdrsEYrcCSpmQqMm6/m9ylUhSulY7N5ivROB3L9GOlGF3Ktbc4zuz341UPw/uIk0ESbBjoSGlYIx8BfzjSwVmyCEYEUUmCPa3Bnd+hwC75yC95S05SxbolU/iEbOCFCpDexEfIioTNCNd6Tp6IlMnNuGeeDe3z//OLx5RWj5zFGT2O8fXxh/P4Ja6w6vSEFCnTIlW2YiDzhzX7ATFKojDlvjpBPcDF4QPdyiG5/iE7/BmfXd+hd3VKpCoG8fzxWw2+c+yTpAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"book-a-demo-Consultation\"\n        title=\"book-a-demo-Consultation\"\n        src=\"/static/fcc4c4b5dc38cc4528f99d09480f4eb2/e5715/book-a-demo-loginradius.png\"\n        srcset=\"/static/fcc4c4b5dc38cc4528f99d09480f4eb2/a6d36/book-a-demo-loginradius.png 650w,\n/static/fcc4c4b5dc38cc4528f99d09480f4eb2/e5715/book-a-demo-loginradius.png 768w,\n/static/fcc4c4b5dc38cc4528f99d09480f4eb2/63ff0/book-a-demo-loginradius.png 2887w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></a></p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"February 23, 2022","updated_date":null,"description":"Retail businesses must leverage cutting-edge technology that helps them attract users that convert into buyers. Identity management in the retail industry is a seamless, secure, and scalable solution to identify and protect customer data and ensure that they can easily access any information they need.","title":"How Can Retailers Lead The Experience Economy While Securing Consumer Identities?","tags":null,"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.8867924528301887,"src":"/static/a1a5d0926538f5aa4ba60ab4fa589a67/33aa5/retailers-balance.jpg","srcSet":"/static/a1a5d0926538f5aa4ba60ab4fa589a67/f836f/retailers-balance.jpg 200w,\n/static/a1a5d0926538f5aa4ba60ab4fa589a67/2244e/retailers-balance.jpg 400w,\n/static/a1a5d0926538f5aa4ba60ab4fa589a67/33aa5/retailers-balance.jpg 768w","sizes":"(max-width: 768px) 100vw, 768px"}}},"author":{"id":"Rakesh Soni","github":"oyesoni","avatar":"rakesh-soni.jpg"}}}},{"node":{"excerpt":"Introduction User authentication is the process of validating a user's identity to ensure that they are who they claim to be. Implementing…","fields":{"slug":"/engineering/guest-post/authenticating-flutter-apps/"},"html":"<h2 id=\"introduction\" style=\"position:relative;\"><a href=\"#introduction\" aria-label=\"introduction permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Introduction</h2>\n<p>User authentication is the process of validating a user's identity to ensure that they are who they claim to be. Implementing user authentication in your application is critical to prevent unauthorized users from accessing sensitive information.</p>\n<p>This tutorial focuses on implementing user authentication and registration in Flutter applications using the LoginRadius API.</p>\n<h2 id=\"prerequisites\" style=\"position:relative;\"><a href=\"#prerequisites\" aria-label=\"prerequisites permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Prerequisites</h2>\n<p>If you wish to follow along with this tutorial, you must have the following set up:</p>\n<ul>\n<li><a href=\"https://accounts.loginradius.com/auth.aspx\">Sign up for a free LoginRadius developer account</a></li>\n<li>Any IDE that has <a href=\"https://docs.flutter.dev/get-started/install\">Flutter SDK</a> installed (i.e., <a href=\"https://developer.android.com/studio\">Android Studio</a>, <a href=\"https://code.visualstudio.com/\">VSCode</a>)</li>\n<li>A basic understanding of <a href=\"https://dart.dev/\">Dart</a> and <a href=\"https://flutter.dev/\">Flutter</a></li>\n</ul>\n<p>This tutorial is verified with Flutter v2.5.1 and Android Studio v3.5.</p>\n<h2 id=\"getting-started-with-loginradius\" style=\"position:relative;\"><a href=\"#getting-started-with-loginradius\" aria-label=\"getting started with loginradius permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Getting Started with LoginRadius</h2>\n<h3 id=\"what-is-loginradius\" style=\"position:relative;\"><a href=\"#what-is-loginradius\" aria-label=\"what is loginradius permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is LoginRadius?</h3>\n<p>LoginRadius is a cloud-based, SaaS Customer Identity and Access Management (CIAM) platform that provides developers and businesses simplified and robust features for managing customer identity, privacy, and access. LoginRadius offers high-level, secure, and well-documented APIs for integrating User Authentication and Single Sign-on (SSO) into your application.</p>\n<h3 id=\"why-use-loginradius\" style=\"position:relative;\"><a href=\"#why-use-loginradius\" aria-label=\"why use loginradius permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Why use LoginRadius?</h3>\n<p>LoginRadius offers:</p>\n<ul>\n<li>A scalable infrastructure</li>\n<li>Built-in security measures to improve user account security and safe user data management</li>\n<li>Advanced login options such as Social SSO and Passwordless Login to improve the user experience</li>\n<li>SDKs and well-documented APIs for seamless integration into your application</li>\n</ul>\n<p>So, with everything out of the way, let's get started.</p>\n<h2 id=\"setting-up-loginradius-for-your-application\" style=\"position:relative;\"><a href=\"#setting-up-loginradius-for-your-application\" aria-label=\"setting up loginradius for your application permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Setting Up LoginRadius for Your Application</h2>\n<p>After creating an account with LoginRadius, it sets up a free app for you. This is the app in which you would integrate the LoginRadius API with Flutter. Here my app name is “tayy”.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 48.15384615384615%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAABOElEQVQoz41S206EMBDlG/0c/8LE//DNHzAx8WXfNsYHN1lB2QVBoAVKWzjOcFkLi66TnKSdtmfOnKn39lmgEAK67SCUxW/Rdd0MeW1QawtZlvReQkgJpRS89CvD+0eILC+gjYHW2sGwN5RfErYto+VSPSzd2fsBPE42TUPQM7LmAiFGxJVBKDXKxuAQ+PD+ao+LDSrOW55yt5sDrh8CbCOJ7c4fFE7gC6wmy/MeFfkjyRtr7YlgWXiK1hpc3b3Ac6sNBxZxkuKYZLCUUnUN4xCuqeQVF7153P0QTsEHgqaeFwJlrVBV1ZnCGdm45qJH9pATliZWKHMi5G9g2Ts648m7Pq4Y3iuk1pDE0UDIUGZ4xI+FLGnKpifnKS+VudGOude0wmYfrbTsDIg/ak0e/ofwKZS4fw7xDUR5D2J55RUqAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"LoginRadius App Screen\"\n        title=\"LoginRadius App Screen\"\n        src=\"/static/33c5259fc16bb88fb1bb410700db0df3/e5715/app_window.png\"\n        srcset=\"/static/33c5259fc16bb88fb1bb410700db0df3/a6d36/app_window.png 650w,\n/static/33c5259fc16bb88fb1bb410700db0df3/e5715/app_window.png 768w,\n/static/33c5259fc16bb88fb1bb410700db0df3/ad00e/app_window.png 1366w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Next, you need to obtain your LoginRadius API credentials. To do so, login to your Dashboard and navigate to the <code>Configuration</code> tab in the sidebar menu. You will find your API credentials under the <code>API Key and Secret</code> section. Copy and store your <strong>APP Name</strong>, <strong>API Key</strong>, and <strong>API Secret</strong> somewhere safe and easily accessible.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 768px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 48.15384615384615%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAABuUlEQVQoz32SX2sTQRTFxzcJRWmVPtmCoERrq2kbH8TEtLUQxLd+t36F9q3xKXnyAyi0r1qCQtJgyJ/9k52dndmd3RzvTBKa0NALh91ZZn5z7tnLnpVO8KT4FexFGReN7zClEg2uNHSaIiOlS+SJGEIlCHmIURAg4BxSKbD14hes7VbBnn/AWa1ugUPHheN6UHFsD2udWvhMk28aiVGSkDSUitG+6YA9ffcZj7YqYBv7OP/WsMBefwjXH0FKiZigim5W9jmTssBZjUlpmqHbuSGHe1UCHoBtvieHE6CIIuvEbh6Pbw/S+zKZMl1cNVvksHCMx28MsIizqcP+gBx6HsJQkEIrTjIZGXfp3GUTkUNyfFK7Blt7e4SVV58WHHICxZSNmgIktWnWaZbd41Dj9GcbbHXnCKvbhxY4y3DgkDshwUUEGUk0HYGBvBvB/NpcGHou2MOXH5HLlxaA/aFLo8Dh+QE4jUPHlxBJtjRH069FZhq+64Dl8mWsvK4sAHsDBwG17QchBGX3143w21VLHWbT9R9P4rLVpwwLVazTYD+Ym8ORAUlFf3uSYWdEm3vRvcAf/0LUf3XxH7RzuT2/O2SbAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"LoginRadius Configuration Tab\"\n        title=\"LoginRadius Configuration Tab\"\n        src=\"/static/9ac569a072de64231421e73c6c7bb31c/e5715/configuration_tab.png\"\n        srcset=\"/static/9ac569a072de64231421e73c6c7bb31c/a6d36/configuration_tab.png 650w,\n/static/9ac569a072de64231421e73c6c7bb31c/e5715/configuration_tab.png 768w,\n/static/9ac569a072de64231421e73c6c7bb31c/ad00e/configuration_tab.png 1366w\"\n        sizes=\"(max-width: 768px) 100vw, 768px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h2 id=\"integrating-loginradius-api-with-your-flutter-application\" style=\"position:relative;\"><a href=\"#integrating-loginradius-api-with-your-flutter-application\" aria-label=\"integrating loginradius api with your flutter application permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Integrating LoginRadius API with Your Flutter Application.</h2>\n<h3 id=\"step-1-create-a-new-flutter-project\" style=\"position:relative;\"><a href=\"#step-1-create-a-new-flutter-project\" aria-label=\"step 1 create a new flutter project permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 1: Create a New Flutter project</h3>\n<p>Create a new Flutter project and navigate to the folder of the application by running the following commands in your terminal:</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"dart\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">flutter create loginradius_example</span>\n<span class=\"grvsc-line\">cd loginradius_example</span></code></pre>\n<h3 id=\"step-2-install-dependencies\" style=\"position:relative;\"><a href=\"#step-2-install-dependencies\" aria-label=\"step 2 install dependencies permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 2: Install Dependencies</h3>\n<p>Next, you need to install the <code>dio</code> package as a dependency in our project. The <code>dio</code> package is a powerful HTTP client used for making network requests.</p>\n<p>Run the following command to get the newest version of the <code>dio</code> package in your project.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">flutter pub add dio</span></code></pre>\n<p>Then, install the dependency by running <code>flutter pub get</code> in your terminal.</p>\n<h3 id=\"project-structure\" style=\"position:relative;\"><a href=\"#project-structure\" aria-label=\"project structure permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Project Structure</h3>\n<p>The project is being structured in this order:</p>\n<p><img src=\"/b063fac3cc95c21f1d7327d989a883ef/folder-structure.png\" alt=\"Folder Structure\"></p>\n<ul>\n<li>Core (contains a class that handles network requests)</li>\n<li>Screens (the UI of our app)</li>\n<li>Utils (helper components)</li>\n</ul>\n<h3 id=\"step-3-setting-up-the-api-client-class\" style=\"position:relative;\"><a href=\"#step-3-setting-up-the-api-client-class\" aria-label=\"step 3 setting up the api client class permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 3: Setting up the API Client Class</h3>\n<p>Create a new dart file named <code>api_client.dart</code> and import the <code>dio</code> package into the file, as follows:</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"dart\" data-index=\"2\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">import &#39;package:dio/dio.dart&#39;;</span></code></pre>\n<p>Now let’s create a class named <code>ApiClient</code> and initialize the <code>Dio</code> object in it. The <code>ApiClient</code> class will contain several methods for making network requests based on your features, including User Registration, User Login, Get User Profile Data, and User Logout.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"dart\" data-index=\"3\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">import &#39;package:dio/dio.dart&#39;;</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">class ApiClient {</span>\n<span class=\"grvsc-line\">   final Dio _dio = Dio();</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">    Future&lt;Response&gt; registerUser() async {</span>\n<span class=\"grvsc-line\">        //IMPLEMENT USER REGISTRATION</span>\n<span class=\"grvsc-line\">    }</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">    Future&lt;Response&gt; login() async {</span>\n<span class=\"grvsc-line\">        //IMPLEMENT USER LOGIN</span>\n<span class=\"grvsc-line\">    }</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">    Future&lt;Response&gt; getUserProfileData() async {</span>\n<span class=\"grvsc-line\">        //GET USER PROFILE DATA</span>\n<span class=\"grvsc-line\">    }</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">    Future&lt;Response&gt; logout() async {</span>\n<span class=\"grvsc-line\">        //IMPLEMENT USER LOGOUT</span>\n<span class=\"grvsc-line\">     }</span>\n<span class=\"grvsc-line\">}</span></code></pre>\n<h3 id=\"step-4-implement-user-registration\" style=\"position:relative;\"><a href=\"#step-4-implement-user-registration\" aria-label=\"step 4 implement user registration permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 4: Implement User Registration</h3>\n<p>Before implementing the user registration functionality, you must first <a href=\"https://www.loginradius.com/developers/\">obtain the user registration endpoint URL from the LoginRadius API Docs</a>.</p>\n<p>After retrieving the endpoint URL, you need to send a POST request to the endpoint using the <code>Dio</code> package by passing in:</p>\n<ul>\n<li>the <code>apiKey</code> you obtained earlier as a query parameter;</li>\n<li>the <code>userData</code> as the request body; and,</li>\n<li>the <code>SOTT</code> key as a header, as shown below.</li>\n</ul>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"dart\" data-index=\"4\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">class ApiClient {</span>\n<span class=\"grvsc-line\">       //...</span>\n<span class=\"grvsc-line\">       Future&lt;Response&gt; registerUser(Map&lt;String, dynamic&gt;? userData) async {</span>\n<span class=\"grvsc-line\">        try {</span>\n<span class=\"grvsc-line\">          Response response = await _dio.post(</span>\n<span class=\"grvsc-line\">              &#39;https://api.loginradius.com/identity/v2/auth/register&#39;,  //ENDPONT URL</span>\n<span class=\"grvsc-line\">              data: userData, //REQUEST BODY</span>\n<span class=\"grvsc-line\">              queryParameters: {&#39;apikey&#39;: &#39;YOUR_API_KEY&#39;},  //QUERY PARAMETERS</span>\n<span class=\"grvsc-line\">              options: Options(headers: {&#39;X-LoginRadius-Sott&#39;: &#39;YOUR_SOTT_KEY&#39;, //HEADERS</span>\n<span class=\"grvsc-line\">          }));</span>\n<span class=\"grvsc-line\">          //returns the successful json object</span>\n<span class=\"grvsc-line\">          return response.data;</span>\n<span class=\"grvsc-line\">        } on DioError catch (e) {</span>\n<span class=\"grvsc-line\">          //returns the error object if there is</span>\n<span class=\"grvsc-line\">          return e.response!.data;</span>\n<span class=\"grvsc-line\">        }</span>\n<span class=\"grvsc-line\">      }</span>\n<span class=\"grvsc-line\">    }</span></code></pre>\n<h3 id=\"step-5-implement-user-login\" style=\"position:relative;\"><a href=\"#step-5-implement-user-login\" aria-label=\"step 5 implement user login permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 5: Implement User Login</h3>\n<p>The below code snippet shows how you’ll send a POST request to the LoginRadius login endpoint URL <code>https://api.loginradius.com/identity/v2/auth/login</code>, passing in your <code>apiKey</code> as a query parameter and the <code>email</code> and <code>password</code> of the user as the request body.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"dart\" data-index=\"5\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">class ApiClient {</span>\n<span class=\"grvsc-line\">       //...</span>\n<span class=\"grvsc-line\">       Future&lt;Response&gt; login(String email, String password) async {</span>\n<span class=\"grvsc-line\">        try {</span>\n<span class=\"grvsc-line\">          Response response = await _dio.post(</span>\n<span class=\"grvsc-line\">            &#39;https://api.loginradius.com/identity/v2/auth/login&#39;,</span>\n<span class=\"grvsc-line\">            data: {</span>\n<span class=\"grvsc-line\">              &#39;email&#39;: email,</span>\n<span class=\"grvsc-line\">              &#39;password&#39;: password</span>\n<span class=\"grvsc-line\">            },</span>\n<span class=\"grvsc-line\">            queryParameters: {&#39;apikey&#39;: &#39;YOUR_API_KEY&#39;},</span>\n<span class=\"grvsc-line\">          );</span>\n<span class=\"grvsc-line\">          //returns the successful user data json object</span>\n<span class=\"grvsc-line\">          return response.data;</span>\n<span class=\"grvsc-line\">        } on DioError catch (e) {</span>\n<span class=\"grvsc-line\">          //returns the error object if any</span>\n<span class=\"grvsc-line\">          return e.response!.data;</span>\n<span class=\"grvsc-line\">        }</span>\n<span class=\"grvsc-line\">      }</span>\n<span class=\"grvsc-line\">    }</span></code></pre>\n<h3 id=\"step-6-get-user-profile-data\" style=\"position:relative;\"><a href=\"#step-6-get-user-profile-data\" aria-label=\"step 6 get user profile data permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 6: Get User Profile Data</h3>\n<p>To retrieve the user profile details, send a <code>GET</code> request to the Read Profile Endpoint URL <code>https://api.loginradius.com/identity/v2/auth/account</code>, passing in your <code>apiKey</code> as a query parameter and the user's access token as the header.</p>\n<blockquote>\n<p>The user’s access token is gotten from the successful response object of the User Login endpoint.</p>\n</blockquote>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"dart\" data-index=\"6\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">class ApiClient {</span>\n<span class=\"grvsc-line\">       //...</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">       Future&lt;Response&gt; getUserProfileData(String accesstoken) async {</span>\n<span class=\"grvsc-line\">        try {</span>\n<span class=\"grvsc-line\">          Response response = await _dio.get(</span>\n<span class=\"grvsc-line\">            &#39;https://api.loginradius.com/identity/v2/auth/account&#39;,</span>\n<span class=\"grvsc-line\">            queryParameters: {&#39;apikey&#39;: &#39;YOUR_API_KEY&#39;},</span>\n<span class=\"grvsc-line\">            options: Options(</span>\n<span class=\"grvsc-line\">              headers: {</span>\n<span class=\"grvsc-line\">                &#39;Authorization&#39;: &#39;Bearer ${YOUR_ACCESS_TOKEN}&#39;,</span>\n<span class=\"grvsc-line\">              },</span>\n<span class=\"grvsc-line\">            ),</span>\n<span class=\"grvsc-line\">          );</span>\n<span class=\"grvsc-line\">          return response.data;</span>\n<span class=\"grvsc-line\">        } on DioError catch (e) {</span>\n<span class=\"grvsc-line\">          return e.response!.data;</span>\n<span class=\"grvsc-line\">        }</span>\n<span class=\"grvsc-line\">    }</span></code></pre>\n<h3 id=\"step-7-implement-user-logout\" style=\"position:relative;\"><a href=\"#step-7-implement-user-logout\" aria-label=\"step 7 implement user logout permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Step 7: Implement User Logout</h3>\n<p>Finally, to implement the user logout functionality, you would send a <code>GET</code> request to the Invalidate User Access Token endpoint URL <code>https://api.loginradius.com/identity/v2/auth/access_token/InValidate</code>. This API call invalidates the user's active access token, requiring them to re-authenticate if they want to access their data.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"dart\" data-index=\"7\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">class ApiClient {</span>\n<span class=\"grvsc-line\">       //...</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">      Future&lt;Response&gt; logout(String accessToken) async {</span>\n<span class=\"grvsc-line\">        try {</span>\n<span class=\"grvsc-line\">          Response response = await _dio.get(</span>\n<span class=\"grvsc-line\">            &#39;https://api.loginradius.com/identity/v2/auth/access_token/InValidate&#39;,</span>\n<span class=\"grvsc-line\">            queryParameters: {&#39;apikey&#39;: ApiSecret.apiKey},</span>\n<span class=\"grvsc-line\">            options: Options(</span>\n<span class=\"grvsc-line\">              headers: {&#39;Authorization&#39;: &#39;Bearer $accessToken&#39;},</span>\n<span class=\"grvsc-line\">            ),</span>\n<span class=\"grvsc-line\">          );</span>\n<span class=\"grvsc-line\">          return response.data;</span>\n<span class=\"grvsc-line\">        } on DioError catch (e) {</span>\n<span class=\"grvsc-line\">          return e.response!.data;</span>\n<span class=\"grvsc-line\">        }</span>\n<span class=\"grvsc-line\">      }</span>\n<span class=\"grvsc-line\">    }</span></code></pre>\n<p>That concludes the <code>ApiClient</code> class. Next, you'll build the UI for your Flutter application, making use of the methods you just created in the <code>ApiClient</code> class.</p>\n<h3 id=\"building-the-ui\" style=\"position:relative;\"><a href=\"#building-the-ui\" aria-label=\"building the ui permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Building the UI</h3>\n<p>Your Flutter application will consist of four screens, which include:</p>\n<ul>\n<li>Registration Screen</li>\n<li>Login Screen</li>\n<li>Home Screen</li>\n</ul>\n<p>Let’s begin by building the Registration Screen.</p>\n<h3 id=\"registration-screen\" style=\"position:relative;\"><a href=\"#registration-screen\" aria-label=\"registration screen permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Registration Screen</h3>\n<p>The <code>RegistrationScreen</code> has two <code>TextFormField</code> widgets that serve as our <code>email</code> and <code>password</code> fields, as well as an <code>ElevatedButton</code> to handle event submission, as shown in the code snippet below from the <code>register.dart</code> file.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"dart\" data-index=\"8\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"> //...</span>\n<span class=\"grvsc-line\">    @override</span>\n<span class=\"grvsc-line\">    Widget build(BuildContext context) {</span>\n<span class=\"grvsc-line\">      Scaffold(</span>\n<span class=\"grvsc-line\">          backgroundColor: Colors.blueGrey[200],</span>\n<span class=\"grvsc-line\">          body: Form(</span>\n<span class=\"grvsc-line\">            key: _formKey,</span>\n<span class=\"grvsc-line\">            child: SizedBox(</span>\n<span class=\"grvsc-line\">              width: size.width,</span>\n<span class=\"grvsc-line\">              height: size.height,</span>\n<span class=\"grvsc-line\">              child: Align(</span>\n<span class=\"grvsc-line\">                alignment: Alignment.center,</span>\n<span class=\"grvsc-line\">                child: Container(</span>\n<span class=\"grvsc-line\">                  width: size.width * 0.85,</span>\n<span class=\"grvsc-line\">                  padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 30),</span>\n<span class=\"grvsc-line\">                  decoration: BoxDecoration(</span>\n<span class=\"grvsc-line\">                    color: Colors.white,</span>\n<span class=\"grvsc-line\">                    borderRadius: BorderRadius.circular(20),</span>\n<span class=\"grvsc-line\">                  ),</span>\n<span class=\"grvsc-line\">                  child: SingleChildScrollView(</span>\n<span class=\"grvsc-line\">                    child: Column(</span>\n<span class=\"grvsc-line\">                      crossAxisAlignment: CrossAxisAlignment.start,</span>\n<span class=\"grvsc-line\">                      children: &lt;Widget&gt;[</span>\n<span class=\"grvsc-line\">                        const Center(</span>\n<span class=\"grvsc-line\">                          child: Text(</span>\n<span class=\"grvsc-line\">                            &quot;Register&quot;,</span>\n<span class=\"grvsc-line\">                            style: TextStyle(</span>\n<span class=\"grvsc-line\">                              fontSize: 30,</span>\n<span class=\"grvsc-line\">                              fontWeight: FontWeight.bold,</span>\n<span class=\"grvsc-line\">                            ),</span>\n<span class=\"grvsc-line\">                          ),</span>\n<span class=\"grvsc-line\">                        ),</span>\n<span class=\"grvsc-line\">                        SizedBox(height: size.height * 0.05),</span>\n<span class=\"grvsc-line\">                        TextFormField(</span>\n<span class=\"grvsc-line\">                          validator: (value) =&gt;</span>\n<span class=\"grvsc-line\">                              Validator.validateEmail(value ?? &quot;&quot;),</span>\n<span class=\"grvsc-line\">                          controller: emailController,</span>\n<span class=\"grvsc-line\">                          keyboardType: TextInputType.emailAddress,</span>\n<span class=\"grvsc-line\">                          decoration: InputDecoration(</span>\n<span class=\"grvsc-line\">                            hintText: &quot;Email&quot;,</span>\n<span class=\"grvsc-line\">                            isDense: true,</span>\n<span class=\"grvsc-line\">                            border: OutlineInputBorder(</span>\n<span class=\"grvsc-line\">                              borderRadius: BorderRadius.circular(10),</span>\n<span class=\"grvsc-line\">                            ),</span>\n<span class=\"grvsc-line\">                          ),</span>\n<span class=\"grvsc-line\">                        ),</span>\n<span class=\"grvsc-line\">                        SizedBox(height: size.height * 0.03),</span>\n<span class=\"grvsc-line\">                        TextFormField(</span>\n<span class=\"grvsc-line\">                          obscureText: _showPassword,</span>\n<span class=\"grvsc-line\">                          validator: (value) =&gt;</span>\n<span class=\"grvsc-line\">                              Validator.validatePassword(value ?? &quot;&quot;),</span>\n<span class=\"grvsc-line\">                          controller: passwordController,</span>\n<span class=\"grvsc-line\">                          keyboardType: TextInputType.visiblePassword,</span>\n<span class=\"grvsc-line\">                          decoration: InputDecoration(</span>\n<span class=\"grvsc-line\">                            hintText: &quot;Password&quot;,</span>\n<span class=\"grvsc-line\">                            isDense: true,</span>\n<span class=\"grvsc-line\">                            border: OutlineInputBorder(</span>\n<span class=\"grvsc-line\">                              borderRadius: BorderRadius.circular(10),</span>\n<span class=\"grvsc-line\">                            ),</span>\n<span class=\"grvsc-line\">                          ),</span>\n<span class=\"grvsc-line\">                        ),</span>\n<span class=\"grvsc-line\">                        SizedBox(height: size.height * 0.06),</span>\n<span class=\"grvsc-line\">                        Row(</span>\n<span class=\"grvsc-line\">                          mainAxisAlignment: MainAxisAlignment.center,</span>\n<span class=\"grvsc-line\">                          children: [</span>\n<span class=\"grvsc-line\">                            Expanded(</span>\n<span class=\"grvsc-line\">                              child: ElevatedButton(</span>\n<span class=\"grvsc-line\">                                onPressed: _handleRegister,</span>\n<span class=\"grvsc-line\">                                style: ElevatedButton.styleFrom(</span>\n<span class=\"grvsc-line\">                                    primary: Colors.indigo,</span>\n<span class=\"grvsc-line\">                                    shape: RoundedRectangleBorder(</span>\n<span class=\"grvsc-line\">                                        borderRadius: BorderRadius.circular(10)),</span>\n<span class=\"grvsc-line\">                                    padding: const EdgeInsets.symmetric(</span>\n<span class=\"grvsc-line\">                                        horizontal: 40, vertical: 15)),</span>\n<span class=\"grvsc-line\">                                child: const Text(</span>\n<span class=\"grvsc-line\">                                  &quot;Register&quot;,</span>\n<span class=\"grvsc-line\">                                  style: TextStyle(</span>\n<span class=\"grvsc-line\">                                    fontSize: 20,</span>\n<span class=\"grvsc-line\">                                    fontWeight: FontWeight.bold,</span>\n<span class=\"grvsc-line\">                                  ),</span>\n<span class=\"grvsc-line\">                                ),</span>\n<span class=\"grvsc-line\">                              ),</span>\n<span class=\"grvsc-line\">                            ),</span>\n<span class=\"grvsc-line\">                          ],</span>\n<span class=\"grvsc-line\">                        ),</span>\n<span class=\"grvsc-line\">                      ],</span>\n<span class=\"grvsc-line\">                    ),</span>\n<span class=\"grvsc-line\">                  ),</span>\n<span class=\"grvsc-line\">                ),</span>\n<span class=\"grvsc-line\">              ),</span>\n<span class=\"grvsc-line\">            ),</span>\n<span class=\"grvsc-line\">          ),</span>\n<span class=\"grvsc-line\">        );</span>\n<span class=\"grvsc-line\">    }</span>\n<span class=\"grvsc-line\">    //...</span></code></pre>\n<p>In the <code>onPressed</code> callback of the <code>ElevatedButton</code> widget, you'll handle the validation of your form data.</p>\n<p>If the form is validated, you pass your <code>userData</code> to the <code>registerUser</code> method from the <code>ApiClient</code> class for processing.</p>\n<p>If the response is an error, you show a snackbar with the error message. Otherwise, the user is redirected to the Login Screen.</p>\n<blockquote>\n<p>In the following example, you've provided only a few user attributes as <code>userData</code>. To view the complete list of user attributes, please look at the body parameters of the User Registration API here.</p>\n</blockquote>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"dart\" data-index=\"9\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">Future&lt;void&gt; _handleRegister() async {</span>\n<span class=\"grvsc-line\">    if (_formKey.currentState!.validate()) {</span>\n<span class=\"grvsc-line\">    //show snackbar to indicate loading</span>\n<span class=\"grvsc-line\">     ScaffoldMessenger.of(context).showSnackBar(SnackBar(</span>\n<span class=\"grvsc-line\">        content: const Text(&#39;Processing Data&#39;),</span>\n<span class=\"grvsc-line\">        backgroundColor: Colors.green.shade300,</span>\n<span class=\"grvsc-line\">      ));</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">   //the user data to be sent</span>\n<span class=\"grvsc-line\">    Map&lt;String, dynamic&gt; userData = {</span>\n<span class=\"grvsc-line\">      &quot;Email&quot;: [</span>\n<span class=\"grvsc-line\">        {</span>\n<span class=\"grvsc-line\">          &quot;Type&quot;: &quot;Primary&quot;,</span>\n<span class=\"grvsc-line\">          &quot;Value&quot;: emailController.text,</span>\n<span class=\"grvsc-line\">        }</span>\n<span class=\"grvsc-line\">      ],</span>\n<span class=\"grvsc-line\">      &quot;Password&quot;: passwordController.text,</span>\n<span class=\"grvsc-line\">      &quot;About&quot;: &#39;I am a new user :smile:&#39;,</span>\n<span class=\"grvsc-line\">      &quot;FirstName&quot;: &quot;Test&quot;,</span>\n<span class=\"grvsc-line\">      &quot;LastName&quot;: &quot;Account&quot;,</span>\n<span class=\"grvsc-line\">      &quot;BirthDate&quot;: &quot;10-12-1985&quot;,</span>\n<span class=\"grvsc-line\">      &quot;Gender&quot;: &quot;M&quot;,</span>\n<span class=\"grvsc-line\">    };</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">    //get response from ApiClient</span>\n<span class=\"grvsc-line\">    dynamic res = await _apiClient.registerUser(userData);</span>\n<span class=\"grvsc-line\">    ScaffoldMessenger.of(context).hideCurrentSnackBar();</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">    //checks if there is no error in the response body.</span>\n<span class=\"grvsc-line\">    //if error is not present, navigate the users to Login Screen.</span>\n<span class=\"grvsc-line\">    if (res[&#39;ErrorCode&#39;] == null) {</span>\n<span class=\"grvsc-line\">      Navigator.push(context,</span>\n<span class=\"grvsc-line\">          MaterialPageRoute(builder: (context) =&gt; const LoginScreen()));</span>\n<span class=\"grvsc-line\">    } else {</span>\n<span class=\"grvsc-line\">     //if error is present, display a snackbar showing the error messsage</span>\n<span class=\"grvsc-line\">      ScaffoldMessenger.of(context).showSnackBar(SnackBar(</span>\n<span class=\"grvsc-line\">        content: Text(&#39;Error: ${res[&#39;Message&#39;]}&#39;),</span>\n<span class=\"grvsc-line\">        backgroundColor: Colors.red.shade300,</span>\n<span class=\"grvsc-line\">      ));</span>\n<span class=\"grvsc-line\">    }</span>\n<span class=\"grvsc-line\">  }</span>\n<span class=\"grvsc-line\">}</span></code></pre>\n<h3 id=\"login-screen\" style=\"position:relative;\"><a href=\"#login-screen\" aria-label=\"login screen permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Login Screen</h3>\n<p>The <code>LoginScreen</code> UI code is similar to the <code>RegistrationScreen</code> in that it also has two <code>TextFormField</code> widgets that serve as our <code>email</code> and <code>password</code> fields, as well as an <code>ElevatedButton</code> to handle event submission. So, for the sake of brevity, I’ll be leaving out the <code>LoginScreen</code> UI code and focusing mainly on the code to be written in the <code>ElevatedButton</code> onPressed callback in the <code>login_screen.dart</code> file.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"dart\" data-index=\"10\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">//...</span>\n<span class=\"grvsc-line\">    //...</span>\n<span class=\"grvsc-line\">       Future&lt;void&gt; loginUsers() async {</span>\n<span class=\"grvsc-line\">        if (_formKey.currentState!.validate()) {</span>\n<span class=\"grvsc-line\">          //show snackbar to indicate loading</span>\n<span class=\"grvsc-line\">          ScaffoldMessenger.of(context).showSnackBar(SnackBar(</span>\n<span class=\"grvsc-line\">            content: const Text(&#39;Processing Data&#39;),</span>\n<span class=\"grvsc-line\">            backgroundColor: Colors.green.shade300,</span>\n<span class=\"grvsc-line\">          ));</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">          //get response from ApiClient</span>\n<span class=\"grvsc-line\">          dynamic res = await _apiClient.login(</span>\n<span class=\"grvsc-line\">            emailController.text,</span>\n<span class=\"grvsc-line\">            passwordController.text,</span>\n<span class=\"grvsc-line\">          );</span>\n<span class=\"grvsc-line\">          ScaffoldMessenger.of(context).hideCurrentSnackBar();</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">          //if there is no error, get the user&#39;s accesstoken and pass it to HomeScreen</span>\n<span class=\"grvsc-line\">          if (res[&#39;ErrorCode&#39;] == null) {</span>\n<span class=\"grvsc-line\">            String accessToken = res[&#39;access_token&#39;];</span>\n<span class=\"grvsc-line\">            Navigator.push(</span>\n<span class=\"grvsc-line\">                context,</span>\n<span class=\"grvsc-line\">                MaterialPageRoute(</span>\n<span class=\"grvsc-line\">                    builder: (context) =&gt; HomeScreen(accesstoken: accessToken)));</span>\n<span class=\"grvsc-line\">          } else {</span>\n<span class=\"grvsc-line\">          //if an error occurs, show snackbar with error message</span>\n<span class=\"grvsc-line\">          ScaffoldMessenger.of(context).showSnackBar(SnackBar(</span>\n<span class=\"grvsc-line\">            content: Text(&#39;Error: ${res[&#39;Message&#39;]}&#39;),</span>\n<span class=\"grvsc-line\">            backgroundColor: Colors.red.shade300,</span>\n<span class=\"grvsc-line\">          ));</span>\n<span class=\"grvsc-line\">          }</span>\n<span class=\"grvsc-line\">        }</span>\n<span class=\"grvsc-line\">      }</span>\n<span class=\"grvsc-line\">    //...</span></code></pre>\n<p>The code snippet above is a method that first validates the form before passing the <code>email</code> and <code>password</code> values to the <code>login</code> method from the <code>ApiClient</code> class for handling.</p>\n<p>If the response is successful, you obtain the user’s <code>access_token</code> from the response data and pass it over to the <code>HomeScreen</code>. Otherwise, you display a snackbar with the error message that occurred.</p>\n<p>Then, you pass the <code>loginUsers</code> method you created above to the <code>onPressed</code> property of the <code>ElevatedButton</code> widget in the <code>LoginScreen</code>, as shown below.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"dart\" data-index=\"11\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">    ElevatedButton(</span>\n<span class=\"grvsc-line\">        onPressed: loginUsers, //&lt;--</span>\n<span class=\"grvsc-line\">        style: ElevatedButton.styleFrom(</span>\n<span class=\"grvsc-line\">        primary: Colors.indigo,</span>\n<span class=\"grvsc-line\">        shape: RoundedRectangleBorder(</span>\n<span class=\"grvsc-line\">               borderRadius: BorderRadius.circular(10)),</span>\n<span class=\"grvsc-line\">               padding: const EdgeInsets.symmetric(</span>\n<span class=\"grvsc-line\">                        horizontal: 40, vertical: 15)),</span>\n<span class=\"grvsc-line\">        child: const Text(&quot;Login&quot;,</span>\n<span class=\"grvsc-line\">            style: TextStyle(</span>\n<span class=\"grvsc-line\">                fontSize: 20,</span>\n<span class=\"grvsc-line\">                fontWeight: FontWeight.bold,</span>\n<span class=\"grvsc-line\">            ),</span>\n<span class=\"grvsc-line\">           ),</span>\n<span class=\"grvsc-line\">         ),</span>\n<span class=\"grvsc-line\">       ),</span></code></pre>\n<p>Next, you need to provide a screen that reveals the user's profile data when they successfully log in, and the <code>HomeScreen</code> is there to do so.</p>\n<h3 id=\"home-screen\" style=\"position:relative;\"><a href=\"#home-screen\" aria-label=\"home screen permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Home Screen</h3>\n<p>The <code>HomeScreen</code> displays the user’s profile details using a <code>FutureBuilder</code> widget that accepts a future <code>getUserData</code>.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"dart\" data-index=\"12\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">      Future&lt;Map&lt;String, dynamic&gt;&gt; getUserData() async {</span>\n<span class=\"grvsc-line\">        dynamic userRes;</span>\n<span class=\"grvsc-line\">        userRes = await _apiClient.getUserProfileData(widget.accesstoken);</span>\n<span class=\"grvsc-line\">        return userRes;</span>\n<span class=\"grvsc-line\">      }</span></code></pre>\n<p>The <code>getUserData</code> method above is used to retrieve details of a user by passing in the <code>access_token</code> obtained earlier from the <code>LoginScreen</code> to the <code>ApiClient</code> <code>getUserProfileData</code> method.</p>\n<p>To display the result of your <code>getUserData</code> method on our screen, use a <code>FutureBuilder</code> widget. The code snippet below shows how to use the <code>FutureBuilder</code> to get the results of the <code>getUserData</code> future in the <code>home.dart</code> file.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"dart\" data-index=\"13\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">    class HomeScreen extends StatefulWidget {</span>\n<span class=\"grvsc-line\">      final String accesstoken;</span>\n<span class=\"grvsc-line\">      const HomeScreen({Key? key, required this.accesstoken}) : super(key: key);</span>\n<span class=\"grvsc-line\">      @override</span>\n<span class=\"grvsc-line\">      State&lt;HomeScreen&gt; createState() =&gt; _HomeScreenState();</span>\n<span class=\"grvsc-line\">    }</span>\n<span class=\"grvsc-line\">    class _HomeScreenState extends State&lt;HomeScreen&gt; {</span>\n<span class=\"grvsc-line\">      //instance of ApiClient class</span>\n<span class=\"grvsc-line\">      final ApiClient _apiClient = ApiClient();</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">      //get user data from ApiClient</span>\n<span class=\"grvsc-line\">      Future&lt;Map&lt;String, dynamic&gt;&gt; getUserData() async {</span>\n<span class=\"grvsc-line\">        dynamic userRes;</span>\n<span class=\"grvsc-line\">        userRes = await _apiClient.getUserProfileData(widget.accesstoken);</span>\n<span class=\"grvsc-line\">        return userRes;</span>\n<span class=\"grvsc-line\">      }</span>\n<span class=\"grvsc-line\">      @override</span>\n<span class=\"grvsc-line\">      Widget build(BuildContext context) {</span>\n<span class=\"grvsc-line\">        var size = MediaQuery.of(context).size;</span>\n<span class=\"grvsc-line\">        return Scaffold(</span>\n<span class=\"grvsc-line\">          backgroundColor: Colors.white,</span>\n<span class=\"grvsc-line\">          body: SizedBox(</span>\n<span class=\"grvsc-line\">              width: size.width,</span>\n<span class=\"grvsc-line\">              height: size.height,</span>\n<span class=\"grvsc-line\">              child: FutureBuilder&lt;Map&lt;String, dynamic&gt;&gt;(</span>\n<span class=\"grvsc-line\">                future: getUserData(), //&lt;---</span>\n<span class=\"grvsc-line\">                builder: (context, snapshot) {</span>\n<span class=\"grvsc-line\">                  if (snapshot.hasData) {</span>\n<span class=\"grvsc-line\">                    if (snapshot.connectionState == ConnectionState.waiting) {</span>\n<span class=\"grvsc-line\">                      return Container(</span>\n<span class=\"grvsc-line\">                        height: size.height,</span>\n<span class=\"grvsc-line\">                        width: size.width,</span>\n<span class=\"grvsc-line\">                        color: Colors.blueGrey,</span>\n<span class=\"grvsc-line\">                        child: const Center(</span>\n<span class=\"grvsc-line\">                          child: CircularProgressIndicator(),</span>\n<span class=\"grvsc-line\">                        ),</span>\n<span class=\"grvsc-line\">                      );</span>\n<span class=\"grvsc-line\">                    }</span>\n<span class=\"grvsc-line\">                    //get results from snapshot</span>\n<span class=\"grvsc-line\">                    String fullName = snapshot.data![&#39;FullName&#39;];</span>\n<span class=\"grvsc-line\">                    String firstName = snapshot.data![&#39;FirstName&#39;];</span>\n<span class=\"grvsc-line\">                    String lastName = snapshot.data![&#39;LastName&#39;];</span>\n<span class=\"grvsc-line\">                    String birthDate = snapshot.data![&#39;BirthDate&#39;];</span>\n<span class=\"grvsc-line\">                    String email = snapshot.data![&#39;Email&#39;][0][&#39;Value&#39;];</span>\n<span class=\"grvsc-line\">                    String gender = snapshot.data![&#39;Gender&#39;];</span>\n<span class=\"grvsc-line\">                    return Container(</span>\n<span class=\"grvsc-line\">                      width: size.width,</span>\n<span class=\"grvsc-line\">                      height: size.height,</span>\n<span class=\"grvsc-line\">                      color: Colors.blueGrey.shade400,</span>\n<span class=\"grvsc-line\">                      child: SingleChildScrollView(</span>\n<span class=\"grvsc-line\">                        physics: const BouncingScrollPhysics(),</span>\n<span class=\"grvsc-line\">                     //...</span>\n<span class=\"grvsc-line\">                //...</span></code></pre>\n<p>Finally, let's add the logout feature.</p>\n<p>Add an <code>ElevatedButton</code> widget to the <code>HomeScreen</code>.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"dart\" data-index=\"14\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">     TextButton(</span>\n<span class=\"grvsc-line\">        onPressed: (){},</span>\n<span class=\"grvsc-line\">        style: TextButton.styleFrom(</span>\n<span class=\"grvsc-line\">        backgroundColor: Colors.redAccent.shade700,</span>\n<span class=\"grvsc-line\">        shape: RoundedRectangleBorder(</span>\n<span class=\"grvsc-line\">               borderRadius: BorderRadius.circular(5)),</span>\n<span class=\"grvsc-line\">               padding: const EdgeInsets.symmetric(</span>\n<span class=\"grvsc-line\">                    vertical: 15, horizontal: 25)),</span>\n<span class=\"grvsc-line\">        child: const Text(&#39;Logout&#39;,</span>\n<span class=\"grvsc-line\">          style: TextStyle(color: Colors.white),           ),</span>\n<span class=\"grvsc-line\">        ),</span>\n<span class=\"grvsc-line\">     ),</span></code></pre>\n<p>On pressing the button, you'll call the <code>logout</code> method on the <code>ApiClient</code> class and pass in the <code>access_token</code> value, and then you route the user to the <code>LoginScreen</code>.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"dart\" data-index=\"15\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">     TextButton(</span>\n<span class=\"grvsc-line\">        onPressed: () async {</span>\n<span class=\"grvsc-line\">          await _apiClient.logout(widget.accesstoken);</span>\n<span class=\"grvsc-line\">          Navigator.pushReplacement(</span>\n<span class=\"grvsc-line\">            context, MaterialPageRoute(builder: (context) =&gt; const LoginScreen()));</span>\n<span class=\"grvsc-line\">        },</span>\n<span class=\"grvsc-line\">        style: TextButton.styleFrom(</span>\n<span class=\"grvsc-line\">        backgroundColor: Colors.redAccent.shade700,</span>\n<span class=\"grvsc-line\">        shape: RoundedRectangleBorder(</span>\n<span class=\"grvsc-line\">               borderRadius: BorderRadius.circular(5)),</span>\n<span class=\"grvsc-line\">               padding: const EdgeInsets.symmetric(</span>\n<span class=\"grvsc-line\">                    vertical: 15, horizontal: 25)),</span>\n<span class=\"grvsc-line\">        child: const Text(&#39;Logout&#39;,</span>\n<span class=\"grvsc-line\">             style: TextStyle(color: Colors.white),</span>\n<span class=\"grvsc-line\">          ),</span>\n<span class=\"grvsc-line\">     ),</span></code></pre>\n<p><img src=\"/968d860d94a6f5f996e709e22dcec84a/demo-project.gif\" alt=\"Preview of demo project\"></p>\n<h2 id=\"conclusion\" style=\"position:relative;\"><a href=\"#conclusion\" aria-label=\"conclusion permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Conclusion</h2>\n<p>LoginRadius provides high-level, secure, and well-documented APIs to ease the implementation of authentication and user identity management. This tutorial has discussed LoginRadius's benefits and how to use the LoginRadius APIs to handle user authentication and registration in a Flutter application.</p>\n<p>The complete <a href=\"https://github.com/LoginRadius/engineering-blog-samples/tree/master/Flutter/Flutter_Auth_Guide\">source code of the demo application is available on GitHub</a>.</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n  .dark-default-dark {\n    background-color: #1E1E1E;\n    color: #D4D4D4;\n  }\n</style>","frontmatter":{"date":"February 17, 2022","updated_date":null,"description":"Developing Flutter apps? Learn how to implement user authentication and registration in your Flutter applications quickly with LoginRadius APIs.","title":"Flutter Authentication: Implementing User Signup and Login","tags":["Authentication","Flutter","API"],"pinned":null,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.5037593984962405,"src":"/static/52db7c04cea4a2d8a1eab648a60d075d/ee604/user-authentication-for-flutter-apps.png","srcSet":"/static/52db7c04cea4a2d8a1eab648a60d075d/69585/user-authentication-for-flutter-apps.png 200w,\n/static/52db7c04cea4a2d8a1eab648a60d075d/497c6/user-authentication-for-flutter-apps.png 400w,\n/static/52db7c04cea4a2d8a1eab648a60d075d/ee604/user-authentication-for-flutter-apps.png 800w,\n/static/52db7c04cea4a2d8a1eab648a60d075d/f3583/user-authentication-for-flutter-apps.png 1200w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Yusuf Ahmed","github":null,"avatar":null}}}}]},"markdownRemark":{"excerpt":"Identity is evolving, and developers are at the forefront of this transformation. Every day brings a new learning—adapting to new standards…","fields":{"slug":"/identity/developer-first-identity-provider-loginradius/"},"html":"<p>Identity is evolving, and developers are at the forefront of this transformation. Every day brings a new learning—adapting to new standards and refining approaches to building secure, seamless experiences.</p>\n<p>We’re here to support developers on that journey. We know how important simplicity, efficiency, and well-structured documentation are when working with identity and access management solutions. That’s why we’ve redesigned the <a href=\"https://www.loginradius.com/\">LoginRadius website</a>—to be faster, more intuitive, and developer-first in every way.</p>\n<p>The goal? Having them spend less time searching and more time building.</p>\n<h2 id=\"whats-new-and-improved-on-the-loginradius-website\" style=\"position:relative;\"><a href=\"#whats-new-and-improved-on-the-loginradius-website\" aria-label=\"whats new and improved on the loginradius website permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What’s New and Improved on the LoginRadius Website?</h2>\n<p>LoginRadius’ vision is to give developers a product that simplifies identity management so they can focus on building, deploying, and scaling their applications. To enhance this experience, we’ve spent the last few months redesigning our interface— making navigation more intuitive and reassuring that essential resources are easily accessible.</p>\n<p>Here’s a closer look at what’s new and why it’s important:</p>\n<h3 id=\"a-developer-friendly-dark-theme\" style=\"position:relative;\"><a href=\"#a-developer-friendly-dark-theme\" aria-label=\"a developer friendly dark theme permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>A Developer-Friendly Dark Theme</h3>\n<p><img src=\"/f46881583c7518a93bb24e94c32320de/a-developer-friendly-dark-theme.webp\" alt=\"This image shows how LoginRadius offers several authentication methods like traditional login, social login, passwordless login, passkeys and more in a dark mode.\">    </p>\n<p>Developers spend long hours working in dark-themed IDEs and terminals, so we’ve designed the LoginRadius experience to be developer-friendly and align with that preference.</p>\n<p>The new dark mode reduces eye strain, enhances readability, and provides a seamless transition between a coding environment and our platform. Our new design features a clean, modern aesthetic with a consistent color scheme and Barlow typography, ensuring better readability. High-quality graphics and icons are thoughtfully placed to enhance the content without adding visual clutter.</p>\n<p>So, whether you’re navigating our API docs or configuring authentication into your system, our improved interface will make those extended development hours more comfortable and efficient.</p>\n<h3 id=\"clear-categorization-for-loginradius-capabilities\" style=\"position:relative;\"><a href=\"#clear-categorization-for-loginradius-capabilities\" aria-label=\"clear categorization for loginradius capabilities permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Clear Categorization for LoginRadius Capabilities</h3>\n<p><img src=\"/e5358b82be414940f3fb146013845933/capabilities.webp\" alt=\"This image shows a breakdown of all the LoginRadius CIAM capabilities, including authentication, security, UX, scalability and multi-brand management.\"></p>\n<p>We’ve restructured our website to provide a straightforward breakdown of our customer identity and access management platform capabilities, helping you quickly find what you need:</p>\n<ul>\n<li>Authentication: Easily understand <a href=\"https://www.loginradius.com/blog/identity/authentication-option-for-your-product/\">how to choose the right login method</a>, from traditional passwords and OTPs to social login, federated SSO, and passkeys with few lines of code.</li>\n<li>Security: Implement no-code security features like bot detection, IP throttling, breached password alerts, DDoS protection, and adaptive MFA to safeguard user accounts.</li>\n<li>User Experience: Leverage AI builder, hosted pages, and drag-and-drop workflows to create smooth, branded sign-up and login experiences.</li>\n<li>High Performance &#x26; Scalability: Confidently scale with sub-100ms API response times, 100% uptime, 240K+ RPS, and 28+ global data center regions.</li>\n<li>Multi-Brand Management: Efficiently manage multiple identity apps, choosing isolated or shared data stores based on your brand’s unique needs.</li>\n</ul>\n<p>This structured layout ensures you can quickly understand each capability and how it integrates into your identity ecosystem.</p>\n<h3 id=\"developer-first-navigation\" style=\"position:relative;\"><a href=\"#developer-first-navigation\" aria-label=\"developer first navigation permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Developer-First Navigation</h3>\n<p><img src=\"/a8c155c2b6faf3d5f4b4de4e2b14d763/developers-menu.webp\" alt=\"This image shows the LoginRadius menu bar, highlighting the developer dropdown.\">   </p>\n<p>We’ve been analyzing developer workflows to identify how you access key resources. That’s why we redesigned our navigation with one goal in mind: to reduce clicks and make essential resources readily available.</p>\n<p>The new LoginRadius structure puts APIs, SDKs, and integration guides right at the menu bar under the Developers dropdown so you can get started faster. Our Products, Solutions, and Customer Services are also clearly categorized, helping development teams quickly find the right tools and make informed decisions.</p>\n<h3 id=\"quick-understanding-of-integration-benefits\" style=\"position:relative;\"><a href=\"#quick-understanding-of-integration-benefits\" aria-label=\"quick understanding of integration benefits permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Quick Understanding of Integration Benefits</h3>\n<p><img src=\"/b2f9a964a2da0ea83e2f8596b833bba7/we-support-your-tech-stack.webp\" alt=\"This image shows a list of popular programming languages and frameworks offered by LoginRadius.\"></p>\n<p>Developers now have a clear view of the tech stack available with LoginRadius, designed to support diverse business needs.</p>\n<p>Our platform offers pre-built SDKs for Node.js, Python, Java, and more, making CIAM integration seamless across popular programming languages and frameworks.</p>\n<h2 id=\"over-to-you-now\" style=\"position:relative;\"><a href=\"#over-to-you-now\" aria-label=\"over to you now permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Over to You Now!</h2>\n<p>Check out our <a href=\"https://www.loginradius.com/\">revamped LoginRadius website</a> and see how the improved experience makes it easier to build, scale, and secure your applications.</p>\n<p>Do not forget to explore the improved navigation and API documentation, and get started with our free trial today. We’re excited to see what you’ll build with LoginRadius!</p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n</style>","frontmatter":{"date":"February 21, 2025","updated_date":null,"description":"LoginRadius’ vision is to give developers a product that simplifies identity management so they can focus on building, deploying, and scaling their applications. To enhance this experience, we’ve redesigned our website interface, making navigation more intuitive and reassuring that essential resources are easily accessible.","title":"Revamped & Ready: Introducing the New Developer-First LoginRadius Website","tags":["Developer tools","API","Identity Management","User Authentication"],"pinned":true,"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.7857142857142858,"src":"/static/80b4e4fbe176a10a327d273504607f32/58556/hero-section.webp","srcSet":"/static/80b4e4fbe176a10a327d273504607f32/61e93/hero-section.webp 200w,\n/static/80b4e4fbe176a10a327d273504607f32/1f5c5/hero-section.webp 400w,\n/static/80b4e4fbe176a10a327d273504607f32/58556/hero-section.webp 800w,\n/static/80b4e4fbe176a10a327d273504607f32/99238/hero-section.webp 1200w,\n/static/80b4e4fbe176a10a327d273504607f32/7c22d/hero-section.webp 1600w,\n/static/80b4e4fbe176a10a327d273504607f32/1258b/hero-section.webp 2732w","sizes":"(max-width: 800px) 100vw, 800px"}}},"author":{"id":"Rakesh Soni","github":"oyesoni","avatar":"rakesh-soni.jpg"}}}},"pageContext":{"limit":6,"skip":288,"currentPage":49,"type":"///","numPages":161,"pinned":"ee8a4479-3471-53b1-bf62-d0d8dc3faaeb"}},"staticQueryHashes":["1171199041","1384082988","2100481360","23180105","528864852"]}