{"id":22021970,"url":"https://github.com/knightchaser/kastle-ts","last_synced_at":"2026-04-11T19:02:38.535Z","repository":{"id":222866719,"uuid":"758585343","full_name":"KnightChaser/kastle-ts","owner":"KnightChaser","description":"A simple user registration and login service with express.js@TypeScript","archived":false,"fork":false,"pushed_at":"2024-02-17T12:32:39.000Z","size":484,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-28T16:46:49.405Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KnightChaser.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-02-16T16:28:01.000Z","updated_at":"2024-02-16T16:39:23.000Z","dependencies_parsed_at":"2024-02-16T17:53:47.672Z","dependency_job_id":"4ac3ba71-9607-44e9-a316-6ff31d49d9d9","html_url":"https://github.com/KnightChaser/kastle-ts","commit_stats":null,"previous_names":["knightchaser/kastle-ts"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KnightChaser%2Fkastle-ts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KnightChaser%2Fkastle-ts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KnightChaser%2Fkastle-ts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KnightChaser%2Fkastle-ts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KnightChaser","download_url":"https://codeload.github.com/KnightChaser/kastle-ts/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245086217,"owners_count":20558539,"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","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":[],"created_at":"2024-11-30T06:16:54.113Z","updated_at":"2025-12-30T20:38:19.191Z","avatar_url":"https://github.com/KnightChaser.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kastle-ts\n![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)\n![Express.js](https://img.shields.io/badge/express.js-%23404d59.svg?style=for-the-badge\u0026logo=express\u0026logoColor=%2361DAFB)\n![JWT](https://img.shields.io/badge/JWT-black?style=for-the-badge\u0026logo=JSON%20web%20tokens)\n![HTML5](https://img.shields.io/badge/html5-%23E34F26.svg?style=for-the-badge\u0026logo=html5\u0026logoColor=white)\n![JavaScript](https://img.shields.io/badge/javascript-%23323330.svg?style=for-the-badge\u0026logo=javascript\u0026logoColor=%23F7DF1E)\n![CSS3](https://img.shields.io/badge/css3-%231572B6.svg?style=for-the-badge\u0026logo=css3\u0026logoColor=white)\n![MySQL](https://img.shields.io/badge/mysql-%2300f.svg?style=for-the-badge\u0026logo=mysql\u0026logoColor=white)\n\nA simple user registration and login service with **express.js@TypeScript**. Good start for learning TypeScript, express.js, JWT Token(`jsonwebtoken`), MySQL, or NodeJS based services.\n\n### Features\nBecause it's main purpose is learn NodeJS-based web frameworks, there are no special features, just user registration, login, and logout. The user logged session will be managed by JWT(JSON Web Token), and user password will be stored after encryption with BCrypt. Also provide basic necessary validity checks like blocking logging in after login, checking account existence before registering a new user with a specific ID.\n![1](./readme_pictures/kastle_ts_1.png)\n![2](./readme_pictures/kastle_ts_2.png)\n![3](./readme_pictures/kastle_ts_3.png)\n![4](./readme_pictures/kastle_ts_4.png)\n\n### Prerequisites\n1. Go to `.env` file and adjust the environmental variables (especially for MySQL databases.)\n```env\n# Express.js server\nSERVER_ACCESS_PORT=7777\n\n# Token secret\nJWT_SECRET=\"kastle_ts\"\n\n# MySQL database\nMYSQL_DB_HOST=\"localhost\"\nMYSQL_DB_PORT=3306\nMYSQL_DB_USER=\"root\"\nMYSQL_DB_PASSWORD=\"pass12##\"\nMYSQL_USER_DATABASE_NAME=\"kastle_ts\"\nMYSQL_USER_TABLE_NAME=\"users\"\n\n# Bcrypt salt\nBCRYPT_SALT_COUNT=10\n```\n\n2. Create a table to store user information in MySQL database, `(${env.MYSQL_USER_DATABASE_NAME}.${env.MYSQL_USER_TABLE_NAME})`\n```sql\n-- A user table to store user information\nCREATE TABLE users (\n    UserID INT AUTO_INCREMENT PRIMARY KEY,\n    Username VARCHAR(50) NOT NULL,\n    Email VARCHAR(100) NOT NULL,\n    Password VARCHAR(255) NOT NULL\n);\n```\n- So, the user information will be stored like below picture. (`Password` is encrypted with BCrypt package at the server side.)\n![db_1](./readme_pictures/kastle_ts_db_1.png)\n\n3. Install NPM dependencies. Detailed requirements are described in `/package-lock.json` and `/package.json`.\n```powershell\nnpm install\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fknightchaser%2Fkastle-ts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fknightchaser%2Fkastle-ts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fknightchaser%2Fkastle-ts/lists"}