Saturday, 26 July 2025

React Native Project setup

Creating React-native app with using Expo, language Typescript

 

Here's a step-by-step guide to creating a React Native app using Expo and TypeScript:

Step 1: Install Expo CLI


bash
npm install -g expo-cli


Step 2: Create a new Expo project


bash
npx create-expo-app my-app --template blank-typescript


This will create a new Expo project with a TypeScript template.

Step 3: Navigate to the project directory


bash
cd my-app


Step 4: Start the development server


bash
npx expo start


This will start the development server and open the Expo DevTools in your default web browser.

Project Structure:

The project structure will look like this:


bash
my-app/
├── App.tsx
├── app.json
├── assets/
├── babel.config.js
├── package.json
├── tsconfig.json
└── ...


App.tsx:

The App.tsx file is the main entry point of your app. It contains the root component of your app.


import React from 'react';
import { Text, View } from 'react-native';

export default function App() {
  return (
    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
      <Text>Hello, world!</Text>
    </View>
  );
}


Creating React-native app without using Expo, language JavaScript

npx @react-native-community/cli@latest init bio2
npm install
npx react-native run-android 

Friday, 25 July 2025

Adding AZ B2C to React JS App

 

Adding Azure AD B2C to React Native App

Register your app in Azure active directory

 

1.      Go to azure ad b2c, app registrations -> new registration

 

 

 

2.      Enter some name, redirect uri => Single Page Application = http://localhost:3000

 

3.      Open app just created, click Api permission, assign permission Microsoft Graph- user.Read.All

 

4.      Go to app Overview page, copy client id and tenant id

 

 

Changes in React Js (Javascript language)

1.      Create new app “npx create-react-app my-app”

2.      Cd my-app

3.      Install packages “npm install @azure/msal-browser @azure/msal-react”

4.      Run npm install

5.      Run npm start to run project

6.      Changes in App.js

import logo from './logo.svg';

import './App.css';

import { useIsAuthenticated, useMsal } from "@azure/msal-react";

import { Login } from "./Login";

 

function App() {

  const isAuthenticated = useIsAuthenticated();

  const { instance, accounts } = useMsal();

 

  return (

    <div>

      {isAuthenticated ? (

        <div>

          <h1>Welcome to our application. You are logged in</h1>

          {accounts && accounts.length > 0 && (

            <div>

              <p>Username: {accounts[0].username}</p>

              <p>User ID (Home Account ID): {accounts[0].homeAccountId}</p>

            </div>

          )}

        </div>

      ) : (

        <Login />

      )}

    </div>

  );

}

 

export default App;

 

7. add a file in src folder ‘authConfig.js’

import { CLIENT_ID } from "./constants";

import { TENANT_ID } from "./constants";

 

export const msalConfig = {

  auth: {

    clientId: CLIENT_ID,

    authority: `https://login.microsoftonline.com/${TENANT_ID}`,

    redirectUri: "http://localhost:3000",

  },

};

export const loginRequest = {

  scopes: ["openid", "profile"],

};

 

8. Add constants.js in src folder

export const CLIENT_ID ="0daba125-36a6-44e7-a97a-bf4fe79aa57a";

export const TENANT_ID ="51962fd4-2ece-4606-bdbe-cc684c94f8b0"

 

 

 

9. Changes to make in index.js

import ReactDOM from 'react-dom/client';

import './index.css';

import App from './App';

import reportWebVitals from './reportWebVitals';

import { PublicClientApplication } from "@azure/msal-browser";

import { MsalProvider } from "@azure/msal-react";

import { msalConfig } from "./authConfig";

 

const root = ReactDOM.createRoot(document.getElementById("root"));

const msalInstance = new PublicClientApplication(msalConfig);

 

root.render(

  <MsalProvider instance={msalInstance}>

    <App />

  </MsalProvider>

);

 

10. add a login.js

import { useMsal } from "@azure/msal-react";

import { loginRequest } from "./authConfig";

export const Login = () => {

  const { instance } = useMsal();

  const handleLogin = () => {

    instance.loginPopup(loginRequest).catch((e) => {

      console.error(e);

    });

  };

  return (

    <div>

      <button onClick={handleLogin}>Login With Azure AD</button>

    </div>

  );

};

 

 

Changes in React JS (TypeScript language)

 

Step 1: Create a new file (e.g., msalConfig.ts) to configure MSAL.

import { Configuration } from "@azure/msal-browser";

 

const clientAppId = "your_client_id";

const tenantId = "your_tenant_id";

const policyName = "your_policy_name";

 

const msalConfig: Configuration = {

  auth: {

    clientId: clientAppId,

    authority: `https://${tenantId}.b2clogin.com/${tenantId}.onmicrosoft.com/${policyName}`,

    knownAuthorities: [`https://${tenantId}.b2clogin.com/${tenantId}.onmicrosoft.com/${policyName}`],

  },

};

 

export default msalConfig;

 

Step 2: Implement Authentication

- Create a new component (e.g., AuthProvider.tsx) to wrap your app with the MSAL authentication provider.

import { MsalProvider } from "@azure/msal-react";

import { PublicClientApplication } from "@azure/msal-browser";

import msalConfig from "./msalConfig";

 

const msalInstance = new PublicClientApplication(msalConfig);

 

const AuthProvider = ({ children }: { children: React.ReactNode }) => {

  return <MsalProvider instance={msalInstance}>{children}</MsalProvider>;

};

 

export default AuthProvider;

 

Step 3: Use Authentication in Your App main.tsx

- Wrap your app with the AuthProvider component.

import { StrictMode } from "react";

import { createRoot } from "react-dom/client";

import "bootstrap/dist/css/bootstrap.min.css";

import App from "./App.tsx";

import AuthProvider from "./components/admin/AuthProvider";

 

createRoot(document.getElementById("root")!).render(

  <StrictMode>

    <AuthProvider>

      <App />

    </AuthProvider>

  </StrictMode>

);

 

Step 4: Implement Login and Logout, login.tsx

- Use the useMsal hook to access the MSAL instance and implement login and logout functionality.

import { useMsal } from "@azure/msal-react";

import { useNavigate } from "react-router-dom";

 

const App = () => {

  const { instance, accounts } = useMsal();

 

  const handleLogin = () => {

    instance.loginPopup().then((response) => {

      const username = response.account.username;

      const userid = response.account.localAccountId;

      localStorage.setItem("token", userid);

      localStorage.setItem("username", username);

      navigate("/");

    });

  };

 

  const handleLogout = () => {

    instance.logoutPopup();

  };

 

  return (

    <div>

      {accounts.length > 0 ? (

        <button onClick={handleLogout}>Logout</button>

      ) : (

        <button onClick={handleLogin}>Login</button>

      )}

    </div>

  );

};

 

 

Step 5: App.tsx

import { BrowserRouter, Route, Routes, Navigate } from "react-router-dom";

import { useMsal } from "@azure/msal-react";

 

import Layout from "./components/Layout";

import Home from "./components/Home";

 

import Login from "./components/admin/Login";

import Register from "./components/admin/Register";

import { ToastContainer } from "react-toastify";

import "react-toastify/dist/ReactToastify.css";

 

const App = () => {

  const { accounts } = useMsal();

  const ProtectedRoute = ({ children }: { children: React.ReactNode }) => {

    if (!accounts.length) {

      return <Navigate to="/login" />;

    }

    return <>{children}</>;

  };

 

  return (

    <BrowserRouter>

      <Routes>

        <Route path="/login" element={<Login />} />

        <Route path="/register" element={<Register />} />

 

        <Route

          path="/"

          element={

            <ProtectedRoute>

              <Layout />

            </ProtectedRoute>

          }

        >

          <Route index element={<Home />} />

          <Route path="home" element={<Home />} />

          <Route path="changepassword" element={<ChangePassword />} />

 

        </Route>

      </Routes>

      <ToastContainer />

    </BrowserRouter>

  );

};

 

export default App;

 

Search This Blog

Creating your first "Alexa" Skill

Index What is Alexa What is Alexa Skill? Why is it required when Alexa already equipped with voice assistant? Dev...