Add a single-page application (SPA)
Integrate application for user login and access control.
- 
In your workspace, select Applications > Clients > Create client. 
- 
Provide a name for your application, select the Single Page type, and click Create.  
- 
Configure the redirect URI for your application. The redirect URI defines where to send users after they complete authentication and consent. To learn more, see OAuth Redirect URI  
- 
Copy or download the client application configuration (client ID most importantly) and add it to your application code. Use any OAuth library you want!  
React.js with cloudentity-auth-js
// generate react app using yarn create react-app
   // install dependencies using yarn install
   // add cloudentity auth library (https://github.com/cloudentity/cloudentity-auth-js) using yarn add @cloudentity/auth
   // go to src/App.js
   // import the library
   import CloudentityAuth from '@cloudentity/auth';
   import logo from './logo.svg';
   import './App.css';
   import {useEffect, useState} from "react";
   // initialize the library
   const cloudentity = new CloudentityAuth({
     responseType: ['code'], // required, array with a list of OAuth 2 respose types
     domain: 'postmance.eu.connect.secureauth.com',
     tenantId: 'postmance',
     authorizationServerId: 'docs',
     clientId: '3ad9f3f1235242689f661d0c303183d0',
     redirectUri: "http://localhost:3000/",
     userInfoUri: 'https://postmance.eu.connect.secureauth.com/postmance/docs/userinfo',
     scopes: ['profile', 'email', 'openid']
   });
   function App() {
     // create state for the user info
     const [user, setUser] = useState({})
     useEffect( () => {
       // check if user is logged in
       cloudentity.getAuth().then(
           function (authResponse) {
             // set authenticated state in client app, use oauth data, etc.
             // access token (and id token, if present) are automatically set in browser's local storage,
             // so there may be no need for the client app to handle the response data, unless there are custom requirements
             console.log('success', authResponse);
             cloudentity.userInfo().then(function (userinfoResponse) {
               console.log('userinfo', userinfoResponse);
               // store user info in local state
               setUser(userinfoResponse);
             })
           },
           function (errorResponse) {
             // user is not authorized
             // set unauthenticated state, redirect to login, etc.
             console.log('failure', errorResponse);
             cloudentity.authorize();
           }
       );
     }, [])
     return (
       <div className="App">
         <header className="App-header">
           <img src={logo} className="App-logo" alt="logo" />
           <p>
             Hello {user.name}!
           </p>
           <a
             className="App-link"
             href="https://reactjs.org"
             target="_blank"
             rel="noopener noreferrer"
           >
             Learn React
           </a>
         </header>
       </div>
     );
   }
   export default App;
Vue.js cloudentity-auth-js
 // generate vue app using yarn create vue
   // install dependencies using yarn install
   // add cloudentity auth library (https://github.com/cloudentity/cloudentity-auth-js) using yarn add @cloudentity/auth
   // go to src/router/index.js
   // import the library
   import CloudentityAuth from '@cloudentity/auth'
   // after router initialization add
   const cloudentity = new CloudentityAuth({
       responseType: ['code'], // required, array with a list of OAuth 2 respose types
       domain: 'postmance.eu.connect.secureauth.com',
       tenantId: 'postmance',
       authorizationServerId: 'docs',
       clientId: '3ad9f3f1235242689f661d0c303183d0',
       redirectUri: "http://localhost:5173/",
       userInfoUri: 'https://postmance.eu.connect.secureauth.com/postmance/docs/userinfo',
       scopes: ['profile', 'email', 'openid']
   });
   router.beforeEach((to, from, next) => {
       cloudentity.getAuth().then(
           function (authResponse) {
               // set authenticated state in client app, use oauth data, etc.
               // access token (and id token, if present) are automatically set in browser's local storage,
               // so there may be no need for the client app to handle the response data, unless there are custom requirements
               console.log('success', authResponse);
               cloudentity.userInfo().then(function (userinfoResponse) {
                   console.log('userinfo', userinfoResponse);
                   // do something with the userinfo response
                   next();
               })
           },
           function (errorResponse) {
               // user is not authorized
               // set unauthenticated state, redirect to login, etc.
               console.log('failure', errorResponse);
               cloudentity.authorize();
           }
       );
   })
- Access your application and try the sign in.