1558972443
In this tutorial, you’ll learn how to set up user authentication using React
In 2019, it’s quite easy to find React components for pretty much everything. For example, if you want to add user authentication to your app, you can do so easily with Okta’s React component. Here I’ll walk you through creating a simple, fun React app that fetches random Chuck Norris jokes. I’ll then show you how you can add user authentication and customize your user experience, so the jokes will replace Chuck Norris’ name with their own.
To get React up and running quickly without a lot of hassle, you can use React’s create-react-app script. React also prefers yarn
if you have it installed. You can install those both with this command:
npm install --global create-react-app@2.1.5 yarn@1.12.3
Once you have those installed, you can create a new app with the following:
create-react-app chuck-norris-jokes
The script will create a new directory with some starter files, install a slew of dependencies needed to get things up and running and initialize the project with git. You can now change into the directory and start the development server, which will open the app in your web browser. Your browser will automatically update whenever you change any source files.
cd chuck-norris-jokes
yarn start
First things first, you’ll need to change out the default logo. Since this will be showing Chuck Norris jokes, find your favorite image of Chuck Norris (or just use the one below).
Save the file to src/chuck-norris.png
. Then open up src/App.js
and change the line import logo from './logo.svg'
to import logo from './chuck-norris.png'
.
If you used the image above, the default dark background will make it hard to see. You also don’t really need his head to be spinning around, so open up src/App.css
and make a few changes. You can get rid of the animation
line (and you can get rid of the @keyframes
block. You’ll also want to change the background-color
to something like gray
. You’ll want to add a button, but you can style it to look just like the Learn React
link that’s already there. In the end, your CSS should look something like this (I also added a little padding to the header for small screens):
.App {
text-align: center;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
.App-header {
background-color: gray;
padding: 10px;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
button.App-link {
background: none;
border: none;
padding: 0;
font: inherit;
text-decoration: underline;
cursor: pointer;
}
With the release of React 16.8, you can now use hooks to make your code components a little simpler. It’s not totally necessary, but, why not? In your src/App.js
, change the App
component from a class to a function. The default looks something like this:
class App extends Component {
render() {
return (
// ...
);
}
}
To make it a functional component, change it to look more like this:
const App = () => {
return (
// ...
)
}
It’s not a huge difference, but it’ll allow us to add hooks in, which are a bit simpler than using the class lifecycle methods.
To add a piece of state with hooks, you’ll need to use the useState
function exported from React. You’ll also be using useEffect
later on, so you’ll need to make sure to import both of those. Change the line importing React
to look like this:
Import React, { useState, useEffect } from 'react';
Then to use a piece of state, add the following to the top of your App
function, before the return statement
:
const [joke, setJoke] = useState('');
You now have a way to read a joke and change its value. By default, it will just be an empty string until you fetch it. Speaking of fetching, you can use The Internet Chuck Norris Database to fetch jokes. They come already encoded for HTML, but React expects strings to be decoded (e.g. "
instead of "
). You can install the he
library to handle this for you, then import it using import { decode } from 'he'
. Install it using:
yarn add he@1.2.0
Now you’ll need to write a function to fetch jokes. Since this will need to reference setJoke
, it should be written inside the App
component. The fetch
API supports a signal
that will allow you to cancel the call. This would be important to make sure calls come back in the right order. If you have two or three calls successively, you don’t really care about the first two, but instead, just want the final result.
const fetchJoke = async signal => {
const url = new URL('https://api.icndb.com/jokes/random');
const response = await fetch(url, { signal });
const { value } = await response.json();
setJoke(decode(value.joke));
};
You’ll also need an “effect” hook to fetch the joke whenever there isn’t one. The useEffect
hook will run any time the component renders. However, you can add an array of values to watch, which will cause it to only run the effect when one of those values changes. In this case, you’ll only want to run the effect when the joke
changes, or fetch one if there is no joke set yet. If the effect has a return value, it will be run when cleaning up the app, or before rendering again. Here is where you can provide a function that will cancel the fetch
call.
useEffect(() => {
if (!joke) {
const controller = new AbortController();
fetchJoke(controller.signal);
return () => controller.abort();
}
}, [joke]);
Now you just need to display the joke and add a button to fetch a new one. Clicking the button will set the joke back to an empty string, and the effect will take care of fetching a new joke. Replace the contents of the <p>
tag with the joke (<p>{joke || '...'}</p>
), and replace the <a>
tag with a button:
<button className="App-link" onClick={() => setJoke('')}>
Get a new joke
</button>
Your final code for App.js
should look like this:
import React, { useState, useEffect } from 'react';
import { decode } from 'he';
import logo from './chuck-norris.png';
import './App.css';
const App = () => {
const [joke, setJoke] = useState('');
const fetchJoke = async signal => {
const url = new URL('https://api.icndb.com/jokes/random');
const response = await fetch(url, { signal });
const { value } = await response.json();
setJoke(decode(value.joke));
};
useEffect(() => {
if (!joke) {
const controller = new AbortController();
fetchJoke(controller.signal);
return () => controller.abort();
}
}, [joke]);
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>{joke || '...'}</p>
<button className="App-link" onClick={() => setJoke('')}>
Get a new joke
</button>
</header>
</div>
);
}
export default App;
Now that you have a functional web app, you can add some personalization by allowing users to sign in. One simple way to add authentication to your project is with Okta, which is what I’ll demonstrate. Our API enables you to:
If you don’t already have one, sign up for a forever-free developer account. Log in to your developer console, navigate to Applications, then click Add Application. Select Single-Page App, then click Next.
Since Create React App runs on port 3000 by default, you should add that as a Base URI and Login Redirect URI. Your settings should look like the following:
Click Done to save your app, then copy your Client ID and paste it as a variable into a file called .env.local
in the root of your project. This will allow you to access the file in your code without needing to store credentials in source control. You’ll also need to add your organization URL (without the -admin
suffix). Environment variables (other than NODE_ENV
) need to start with REACT_APP_
in order for Create React App to read them, so the file should end up looking like this:
REACT_APP_OKTA_ORG_URL=https://{yourOktaDomain}
REACT_APP_OKTA_CLIENT_ID={yourClientId}
You may need to restart your server before it will recognize these changes. You can find the running instance and then hit ctrl-c
to close it. Then run it again with yarn start
.
The easiest way to add Authentication with Okta to a React app is to use Okta’s React SDK. You’ll also need to add routes, which can be done using React Router. Go ahead and add these dependencies:
yarn add @okta/okta-react@1.2.0 react-router-dom@4.3.1
Now in order to use Okta in your React app, you’ll need to wrap the app in a provider. In your src/index.js
, instead of rendering the <App />
component by itself, you’ll need to render a <Router>
component. This uses React Router to control different URL paths in your app. Next, you’ll need to include the <Security>
component as a child. This allows Okta to add an auth
object to the context, which can be read from children in the React tree. Then you’ll need a couple Route
s to let the router know what to display for each route. For the default route, you’ll display App
, so everything should look the same as it did before. But you’ll also add an /implicit/callback
route to let Okta handle the OAuth callback. Replace the call to ReactDOM.render
with the following:
import { BrowserRouter as Router, Route } from 'react-router-dom';
import { Security, ImplicitCallback } from '@okta/okta-react';
ReactDOM.render(
<Router>
<Security
issuer={`${process.env.REACT_APP_OKTA_ORG_URL}/oauth2/default`}
client_id={process.env.REACT_APP_OKTA_CLIENT_ID}
redirect_uri={`${window.location.origin}/implicit/callback`}
>
<Route path="/" exact component={App} />
<Route path="/implicit/callback" component={ImplicitCallback} />
</Security>
</Router>,
document.getElementById('root')
);
To tie Okta’s auth to a React component, you’ll need to wrap it in a withAuth
, which adds an auth
prop. Before you do that though, you can simplify things by again making use of hooks. Here I’ll have you create a custom hook that accepts the auth
prop and returns the authenticated
state as well as the current user
. Create a new file src/auth.js
that contains the following:
import { useState, useEffect } from 'react';
export const useAuth = auth => {
const [authenticated, setAuthenticated] = useState(null);
const [user, setUser] = useState(null);
useEffect(() => {
auth.isAuthenticated().then(isAuthenticated => {
if (isAuthenticated !== authenticated) {
setAuthenticated(isAuthenticated);
}
});
});
useEffect(() => {
if (authenticated) {
auth.getUser().then(setUser);
} else {
setUser(null);
}
}, [authenticated]);
return [authenticated, user];
};
Here you’re using two pieces of state: authenticated
and user
, which both start out as null
. Every time the component is rendered, the auth checks to see whether or not a user is authenticated. If authentication has changed, it updates the state. Initially, it will be null
, but after the first time, it will always be either true
or false
. Whenever the authenticated
state changes, that will trigger a call to get more information about the user. If the user isn’t authenticated, you can skip the check and simply set the user to null
.
Back in src/App.js
, you’ll need to import both the withAuth
higher order component that Okta provides, and your new useAuth
hook.
import { withAuth } from '@okta/okta-react';
import { useAuth } from './auth';
Wrap the App
with withAuth
and change the function to accept an auth
param. Previously we had:
const App = () => {
// ...
}
Now you should have:
const App = withAuth(({ auth }) => {
});
Add the new hook below the joke
state:
const [authenticated, user] = useAuth(auth);
You can now add a new button after the “Get a new joke” button. When the authenticated
variable is null
, that means Okta hasn’t initialized yet so you’re not sure if the user is logged in or not. You could show some sort of loading indicator, or you could simply not render the button until you’re sure about the state of authentication:
{authenticated !== null && (
<button
onClick={() => authenticated ? auth.logout() : auth.login()}
className="App-link"
>
Log {authenticated ? 'out' : 'in'}
</button>
)}
Now the user can log in or out, but it doesn’t really do anything besides changing the button from “Log in” to “Log out”. The ICNDb API supports adding a first and last name to the URL, which replaces Chuck Norris with that name. Before the call to fetch
, modify the url
if there is a user
:
if (user) {
url.searchParams.set('firstName', user.given_name);
url.searchParams.set('lastName', user.family_name);
}
Lastly, add a new effect to reset the joke whenever the user
state changes. This will cause the app to fetch a new joke with the user’s name after they’ve logged in, or a default Chuck Norris joke when the user logs out.
useEffect(() => {
setJoke('');
}, [user]);
Your final code should look like this:
import React, { useState, useEffect } from 'react';
import { decode } from 'he';
import { withAuth } from '@okta/okta-react';
import logo from './chuck-norris.png';
import './App.css';
import { useAuth } from './auth';
const App = withAuth(({ auth }) => {
const [joke, setJoke] = useState('');
const [authenticated, user] = useAuth(auth);
const fetchJoke = async signal => {
const url = new URL('https://api.icndb.com/jokes/random');
if (user) {
url.searchParams.set('firstName', user.given_name);
url.searchParams.set('lastName', user.family_name);
}
const response = await fetch(url, { signal });
const { value } = await response.json();
setJoke(decode(value.joke));
};
useEffect(() => {
if (!joke) {
const controller = new AbortController();
fetchJoke(controller.signal);
return () => controller.abort();
}
}, [joke]);
useEffect(() => {
setJoke('');
}, [user]);
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>{joke || '...'}</p>
<button className="App-link" onClick={() => setJoke('')}>
Get a new joke
</button>
{authenticated !== null && (
<button
onClick={() => authenticated ? auth.logout() : auth.login()}
className="App-link"
>
Log {authenticated ? 'out' : 'in'}
</button>
)}
</header>
</div>
);
});
export default App;
☞ Full Stack Developers: Everything You Need to Know
☞ Learn React.js for Beginners
☞ React Hooks Tutorial for Beginners: Getting Started With React Hooks
☞ Learn React - React Crash Course 2019 - React Tutorial with Examples
☞ Comparing the React and Vue Ecosystems with a Real-World SPA
☞ React Router: Add the Power of Navigation
☞ How to publish a React Native component to NPM
☞ React - The Complete Guide (incl Hooks, React Router, Redux)
☞ Modern React with Redux [2019 Update]
☞ React Native - The Practical Guide
☞ MERN Stack Front To Back: Full Stack React, Redux & Node.js
☞ Full-Stack Web Apps with Meteor and React
#reactjs
1598839687
If you are undertaking a mobile app development for your start-up or enterprise, you are likely wondering whether to use React Native. As a popular development framework, React Native helps you to develop near-native mobile apps. However, you are probably also wondering how close you can get to a native app by using React Native. How native is React Native?
In the article, we discuss the similarities between native mobile development and development using React Native. We also touch upon where they differ and how to bridge the gaps. Read on.
Let’s briefly set the context first. We will briefly touch upon what React Native is and how it differs from earlier hybrid frameworks.
React Native is a popular JavaScript framework that Facebook has created. You can use this open-source framework to code natively rendering Android and iOS mobile apps. You can use it to develop web apps too.
Facebook has developed React Native based on React, its JavaScript library. The first release of React Native came in March 2015. At the time of writing this article, the latest stable release of React Native is 0.62.0, and it was released in March 2020.
Although relatively new, React Native has acquired a high degree of popularity. The “Stack Overflow Developer Survey 2019” report identifies it as the 8th most loved framework. Facebook, Walmart, and Bloomberg are some of the top companies that use React Native.
The popularity of React Native comes from its advantages. Some of its advantages are as follows:
Are you wondering whether React Native is just another of those hybrid frameworks like Ionic or Cordova? It’s not! React Native is fundamentally different from these earlier hybrid frameworks.
React Native is very close to native. Consider the following aspects as described on the React Native website:
Due to these factors, React Native offers many more advantages compared to those earlier hybrid frameworks. We now review them.
#android app #frontend #ios app #mobile app development #benefits of react native #is react native good for mobile app development #native vs #pros and cons of react native #react mobile development #react native development #react native experience #react native framework #react native ios vs android #react native pros and cons #react native vs android #react native vs native #react native vs native performance #react vs native #why react native #why use react native
1592807820
What is 2FA
Two-Factor Authentication (or 2FA as it often referred to) is an extra layer of security that is used to provide users an additional level of protection when securing access to an account.
Employing a 2FA mechanism is a vast improvement in security over the Singe-Factor Authentication method of simply employing a username and password. Using this method, accounts that have 2FA enabled, require the user to enter a one-time passcode that is generated by an external application. The 2FA passcode (usually a six-digit number) is required to be input into the passcode field before access is granted. The 2FA input is usually required directly after the username and password are entered by the client.
#tutorials #2fa #access #account security #authentication #authentication method #authentication token #cli #command line #cpanel #feature manager #google authenticator #one time password #otp #otp authentication #passcode #password #passwords #qr code #security #security code #security policy #security practices #single factor authentication #time-based one-time password #totp #two factor authentication #whm
1589722410
As we start learning new technologies we want to start building something or work on a simple project to get a better understanding of the technology. So, let’s build this simple app.
For this app, we will be using PokeApi to get our pokemon data, and also we will be using Hooks. I am using pokemondb for pokemon sprites. It’s just a personal preference you can use whatever you want.
#react-native #react-native-app #react-navigation #react-native-development #react
1615544450
Since March 2020 reached 556 million monthly downloads have increased, It shows that React JS has been steadily growing. React.js also provides a desirable amount of pliancy and efficiency for developing innovative solutions with interactive user interfaces. It’s no surprise that an increasing number of businesses are adopting this technology. How do you select and recruit React.js developers who will propel your project forward? How much does a React developer make? We’ll bring you here all the details you need.
Facebook built and maintains React.js, an open-source JavaScript library for designing development tools. React.js is used to create single-page applications (SPAs) that can be used in conjunction with React Native to develop native cross-platform apps.
In the United States, the average React developer salary is $94,205 a year, or $30-$48 per hour, This is one of the highest among JavaScript developers. The starting salary for junior React.js developers is $60,510 per year, rising to $112,480 for senior roles.
In context of software developer wage rates, the United States continues to lead. In high-tech cities like San Francisco and New York, average React developer salaries will hit $98K and $114per year, overall.
However, the need for React.js and React Native developer is outpacing local labour markets. As a result, many businesses have difficulty locating and recruiting them locally.
It’s no surprise that for US and European companies looking for professional and budget engineers, offshore regions like India are becoming especially interesting. This area has a large number of app development companies, a good rate with quality, and a good pool of React.js front-end developers.
As per Linkedin, the country’s IT industry employs over a million React specialists. Furthermore, for the same or less money than hiring a React.js programmer locally, you may recruit someone with much expertise and a broader technical stack.
React is a very strong framework. React.js makes use of a powerful synchronization method known as Virtual DOM, which compares the current page architecture to the expected page architecture and updates the appropriate components as long as the user input.
React is scalable. it utilises a single language, For server-client side, and mobile platform.
React is steady.React.js is completely adaptable, which means it seldom, if ever, updates the user interface. This enables legacy projects to be updated to the most new edition of React.js without having to change the codebase or make a few small changes.
React is adaptable. It can be conveniently paired with various state administrators (e.g., Redux, Flux, Alt or Reflux) and can be used to implement a number of architectural patterns.
Is there a market for React.js programmers?
The need for React.js developers is rising at an unparalleled rate. React.js is currently used by over one million websites around the world. React is used by Fortune 400+ businesses and popular companies such as Facebook, Twitter, Glassdoor and Cloudflare.
As you’ve seen, locating and Hire React js Developer and Hire React Native developer is a difficult challenge. You will have less challenges selecting the correct fit for your projects if you identify growing offshore locations (e.g. India) and take into consideration the details above.
If you want to make this process easier, You can visit our website for more, or else to write a email, we’ll help you to finding top rated React.js and React Native developers easier and with strives to create this operation
#hire-react-js-developer #hire-react-native-developer #react #react-native #react-js #hire-react-js-programmer
1651604400
React Starter Kit is an opinionated boilerplate for web development built on top of Node.js, Express, GraphQL and React, containing modern web development tools such as Webpack, Babel and Browsersync. Helping you to stay productive following the best practices. A solid starting point for both professionals and newcomers to the industry.
See getting started guide, demo, docs, roadmap | Join #react-starter-kit chat room on Gitter | Visit our sponsors:
The master
branch of React Starter Kit doesn't include a Flux implementation or any other advanced integrations. Nevertheless, we have some integrations available to you in feature branches that you can use either as a reference or merge into your project:
master
)feature/redux
)feature/apollo
)master
)You can see status of most reasonable merge combination as PRs labeled as TRACKING
If you think that any of these features should be on master
, or vice versa, some features should removed from the master
branch, please let us know. We love your feedback!
React Starter Kit
| React Static Boilerplate
| ASP.NET Core Starter Kit
| |
---|---|---|---|
App type | Isomorphic (universal) | Single-page application | Single-page application |
Frontend | |||
Language | JavaScript (ES2015+, JSX) | JavaScript (ES2015+, JSX) | JavaScript (ES2015+, JSX) |
Libraries | React, History, Universal Router | React, History, Redux | React, History, Redux |
Routes | Imperative (functional) | Declarative | Declarative, cross-stack |
Backend | |||
Language | JavaScript (ES2015+, JSX) | n/a | C#, F# |
Libraries | Node.js, Express, Sequelize, GraphQL | n/a | ASP.NET Core, EF Core, ASP.NET Identity |
SSR | Yes | n/a | n/a |
Data API | GraphQL | n/a | Web API |
♥ React Starter Kit? Help us keep it alive by donating funds to cover project expenses via OpenCollective or Bountysource!
Anyone and everyone is welcome to contribute to this project. The best way to start is by checking our open issues, submit a new issue or feature request, participate in discussions, upvote or downvote the issues you like or dislike, send pull requests.
Copyright © 2014-present Kriasoft, LLC. This source code is licensed under the MIT license found in the LICENSE.txt file. The documentation to the project is licensed under the CC BY-SA 4.0 license.
Author: kriasoft
Source Code: https://github.com/kriasoft/react-starter-kit
License: MIT License