Git Product home page Git Product logo

aws-cognito-react's Introduction

aws-cognito-react - v2

signin

If you are looking for v1 version it can be found on the legacy branch. With the release of v2, v1 is no longer supported

Reference implementation / boilerplate for AWS Cognito user management

Demo

aws-cognito-react-demo

v2 Changes

  • Switched to Typescript
  • Replaced redux and saga's with react context
  • Upgraded all libraries to latest major versions
  • No security scan issues
  • Hooks used to manage states
  • Updated to Material UI 4x
  • Added AWS CDK to manage infrastructure
  • Cleaner and simpler Architecture
  • Responsive design

AWS Cognito Infrastructure setup

To help deploy the AWS Cognito infrastructure I've create an Amazon Cloud Development (CDK) script

CDK set up instructions can be found here

CDK deploy instructions

cd cdk
npm run cdk bootstrap   # only needed first time
npm run cdk deploy

After deployment copy the userPoolId and userPoolClientId values from the command line window; you will need these values in the app config step

App Configuration

Setup the Cognito environment values buy creating app/.env.local file and adding the following

REACT_APP_USERPOOL_ID=YOUR_USER_POOL_ID
REACT_APP_CLIENT_ID=YOUR_CLIENT_ID

Create React App has been used to setup the development process so the next steps should be familiar

cd app
npm install
npm start

Other Solutions

Firebase Auth - Great for mobile and web. Fairly limited but easy to use. Integrates really nicely with other Firebase services

Auth0 - Comes with comprehensive and feature rich frontend. Seems to quicky get expensive but a very safe option

Keycloak - Excellent feature rich Enterprise service that offers fully themable frontend. No Cloud solution but easy to deploy to AWS using this CDK script

Useful References

https://www.npmjs.com/package/amazon-cognito-identity-js

https://docs.aws.amazon.com/cdk/api/latest/docs/aws-cognito-readme.html

https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-social-idp.html

https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html

aws-cognito-react's People

Contributors

dbroadhurst avatar dependabot[bot] avatar nagelflorian avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

aws-cognito-react's Issues

Consider not using Material UI

There isn't really enough of a UI to justify the footprint of a material UI dependency, and it's awkward to compose it into apps that don't themselves use Material UI.

To make this really usable, consider using pure HTML, and allowing a className to be passed in per field to add styles. Alternatively, you could allow field elements to be passed in as props and composed, using React.createElement to add listeners.

Supporting newPasswordRequired function

Great job with the sample app !

When a user is created with a temp password, Cognito requires the user to reset the pwd after the initial login.

For that, the newPasswordRequired function is required (including a screen to set the new pwd).

What to do with confirmation code?

Hi. I got Email with verification code, but I have checkout your code. I see no component mention about entering it and confirm. Have you change some configuration since last year?

Show some user details in the landing page

After a successful login, it would be nice to display some user info on the landing page

  • the encoded JWT token (AccessToken in AuthenticationResult), so it can be used to perform backend authentication)
  • Information from the decoded JWT token (username, custom attributes, expiration, groups,....)

Handle newPasswordRequired Flow

Can you advise on how to handle the scenario where users are created by administrators which requires the user to change the password upon first login? As I understand it we need to call sendCode(username) followed by confirmPassowrd(code, newPassword) but whenever I add the code bits to do this I never get the code emails so I suspect this flow needs to be handled differently. I do get the original email when the admin created the user. Any thoughts?

Route Path White screen Shows up

if you change the main route path from "/" to "/anyname" and redirect user when they login to the "/anyname" route you get a white screen. Seems like can only redirect user from"/" and to "/" when they login.
Any idea what is causing this bug?

Landing page code being called twice

I have downloaded and installed your app and it works great, except the Landing page code is called twice, causing anything on the landing page to be called twice as well.

It appears the sagaMiddleware.run(sagas) causes the second rendering. Which makes sense as the page is first rendered, then when the async code is completed it runs again. I was hoping to write code like this to avoid the second rendering:
`let task = sagaMiddleware.run(sagas)

injectTapEventPlugin()

task.done.then(() => {
ReactDOM.render(




,
document.getElementById('root')
)
});`

Unfortunately the task promise never resolves. Do you know what the issue might be?

Thanks.

Token expiration

Hi David,

how do you handle token expiration?

As I know Cognito token expires in 1 hr. So if the app stays idle for 1+ hrs on protected route (while user is signed in and on restricted page) and then user clicks something does it renews token automatically & then performs the request?

For example if request goes to AWS Gateway API which checks user over Cognito - error going to be returned if token is expired.

Thank you.

Npm install issues

For node version 16+ and npm 8+ the following issue happens when running npm i

Add --legacy-peer-deps to the npm i command to work around it.

npm ERR! code ERESOLVE
npm ERR! ERESOLVE could not resolve
npm ERR! 
npm ERR! While resolving: @material-ui/[email protected]
npm ERR! Found: @types/[email protected]
npm ERR! node_modules/@types/react
npm ERR!   @types/react@"^18.0.14" from the root project
npm ERR!   peerOptional @types/react@"*" from @material-ui/[email protected]
npm ERR!   node_modules/@material-ui/types
npm ERR!     @material-ui/types@"5.1.0" from @material-ui/[email protected]
npm ERR!     node_modules/@material-ui/core
npm ERR!       @material-ui/core@"^4.12.4" from the root project
npm ERR!       1 more (@material-ui/icons)
npm ERR!     @material-ui/types@"5.1.0" from @material-ui/[email protected]
npm ERR!     node_modules/@material-ui/styles
npm ERR!       @material-ui/styles@"^4.11.5" from @material-ui/[email protected]
npm ERR!       node_modules/@material-ui/core
npm ERR!         @material-ui/core@"^4.12.4" from the root project
npm ERR!         1 more (@material-ui/icons)
npm ERR!   13 more (@mui/base, @mui/icons-material, @mui/material, ...)
npm ERR! 
npm ERR! Could not resolve dependency:
npm ERR! peerOptional @types/react@"^16.8.6 || ^17.0.0" from @material-ui/[email protected]
npm ERR! node_modules/@material-ui/core
npm ERR!   @material-ui/core@"^4.12.4" from the root project
npm ERR!   peer @material-ui/core@"^4.0.0" from @material-ui/[email protected]
npm ERR!   node_modules/@material-ui/icons
npm ERR!     @material-ui/icons@"^4.11.3" from the root project
npm ERR! 
npm ERR! Conflicting peer dependency: @types/[email protected]
npm ERR! node_modules/@types/react
npm ERR!   peerOptional @types/react@"^16.8.6 || ^17.0.0" from @material-ui/[email protected]
npm ERR!   node_modules/@material-ui/core
npm ERR!     @material-ui/core@"^4.12.4" from the root project
npm ERR!     peer @material-ui/core@"^4.0.0" from @material-ui/[email protected]
npm ERR!     node_modules/@material-ui/icons
npm ERR!       @material-ui/icons@"^4.11.3" from the root project
npm ERR! 
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.