{"id":28125023,"url":"https://github.com/passport/todos-react-express-password","last_synced_at":"2025-08-09T22:09:51.881Z","repository":{"id":52009086,"uuid":"491298576","full_name":"passport/todos-react-express-password","owner":"passport","description":"Todo app using React, Express and Passport for sign in with username and password.","archived":false,"fork":false,"pushed_at":"2022-05-16T15:03:07.000Z","size":90,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-27T00:36:51.826Z","etag":null,"topics":["example","express","nodejs","passport","password","react","sqlite","todomvc"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/passport.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-05-11T23:14:37.000Z","updated_at":"2023-05-10T22:25:26.000Z","dependencies_parsed_at":"2022-08-26T14:31:13.548Z","dependency_job_id":null,"html_url":"https://github.com/passport/todos-react-express-password","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/passport/todos-react-express-password","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passport%2Ftodos-react-express-password","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passport%2Ftodos-react-express-password/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passport%2Ftodos-react-express-password/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passport%2Ftodos-react-express-password/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/passport","download_url":"https://codeload.github.com/passport/todos-react-express-password/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passport%2Ftodos-react-express-password/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268023997,"owners_count":24183133,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-31T02:00:08.723Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["example","express","nodejs","passport","password","react","sqlite","todomvc"],"created_at":"2025-05-14T09:19:52.570Z","updated_at":"2025-08-09T22:09:51.860Z","avatar_url":"https://github.com/passport.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# todos-react-express-password\n\nThis app illustrates how to use [Passport](https://www.passportjs.org/) with\n[React](https://reactjs.org/) and [Express](https://expressjs.com/) to sign\nusers in with a username and password.  Use this example as a starting point for\nyour own web applications.\n\n## Overview\n\nThis app illustrates how to build a todo app with sign in functionality using\nReact, Express, Passport, and the [`passport-local`](https://www.passportjs.org/packages/passport-local/)\nstrategy.\n\nThis app is a JavaScript application with a backend, in which the UI executes in\nthe browser while data management and persistence is handled by the server.\n\nThis app is built using React for the UI and [React Router](https://reactrouter.com/)\nfor routing.  The backend is built using the Express web framework.  Data is\npersisted to a [SQLite](https://www.sqlite.org/) database.\n\nWhen a user first arrives at this app, they are prompted to sign in.  The React\napp prompts the user for their username and password and makes an API call to\nauthenticate with the backend.  Once authenticated, a login session is\nestablished and maintained between the server and the user's browser with a\ncookie.\n\nAfter signing in, the user can view, create, and edit todo items.  Once again,\ninteraction occurs via the React app, which makes API calls to fetch and modify\ndata.  The browser automatically includes the cookie set during login with each\nof these requests.\n\nWhen the server receives a request, it authenticates the cookie and restores the\nlogin session, thus authenticating the user.  It then accesses or stores records\nin the database associated with the authenticated user.\n\n## Implementation\n\nThis app conforms with the [TodoMVC](https://todomvc.com/) [specification](https://github.com/tastejs/todomvc/blob/master/app-spec.md),\nwith two notable exceptions.  First, it adds a user login and registration\nsystem to the app.  Second, it persists data remotely rather than in\n`localStorage`.  Remote storage is accessed via an API that conforms with\n[Todo-Backend](https://todobackend.com/), which is also extended to support\nauthentication.\n\n## License\n\n[The Unlicense](https://opensource.org/licenses/unlicense)\n\n## Credit\n\nCreated by [Jared Hanson](https://www.jaredhanson.me/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpassport%2Ftodos-react-express-password","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpassport%2Ftodos-react-express-password","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpassport%2Ftodos-react-express-password/lists"}