291 lines
7.0 KiB
Markdown
291 lines
7.0 KiB
Markdown
## POST Request
|
|
Login
|
|
|
|
```bash
|
|
curl -X 'POST' \
|
|
'http://127.0.0.1:8080/api/v1/auth/login' \
|
|
-H 'accept: application/json' \
|
|
-H 'Content-Type: application/json' \
|
|
-d '{
|
|
"email": "beyhan@beyhan.dev",
|
|
"password": "1923btO**"
|
|
}'
|
|
```
|
|
|
|
### Request URL
|
|
|
|
```
|
|
http://127.0.0.1:8080/api/v1/auth/login
|
|
```
|
|
|
|
---
|
|
|
|
### Server Response
|
|
|
|
| Code | Details |
|
|
|------|---------|
|
|
| 200 | Success |
|
|
|
|
#### Response Body
|
|
|
|
```json
|
|
{
|
|
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo2LCJlbWFpbCI6ImJleWhhbkBiZXloYW4uZGV2IiwiaXNfYWRtaW4iOnRydWUsImZpcnN0X25hbWUiOiJCZXloYW4iLCJsYXN0X25hbWUiOiJPxJ91ciIsInRva2VuX3R5cGUiOiJhY2Nlc3MiLCJzdWIiOiI2IiwiZXhwIjoxNzcxNzAxNjcyLCJpYXQiOjE3NzE2OTQ0NzJ9.i3OcKU8ChmzR9DirsyRS1gvR0lvAcHuPCNnIvbnvtIc",
|
|
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo2LCJlbWFpbCI6ImJleWhhbkBiZXloYW4uZGV2IiwiaXNfYWRtaW4iOnRydWUsImZpcnN0X25hbWUiOiJCZXloYW4iLCJsYXN0X25hbWUiOiJPxJ91ciIsInRva2VuX3R5cGUiOiJyZWZyZXNoIiwic3ViIjoiNiIsImV4cCI6MTc3NDI4NjQ3MiwiaWF0IjoxNzcxNjk0NDcyfQ.MHG1gK1Jt_6mi2kLXfXpg59QhXaLX-KxFBdMPzQ3X1U",
|
|
"user": {
|
|
"email": "beyhan@beyhan.dev",
|
|
"first_name": "Beyhan",
|
|
"id": 6,
|
|
"is_admin": true,
|
|
"last_name": "Oğur",
|
|
"username": "Beyhan Oğur"
|
|
}
|
|
}
|
|
```
|
|
#########################
|
|
|
|
## GET Request
|
|
|
|
Me
|
|
|
|
```bash
|
|
curl -X 'GET' \
|
|
'http://127.0.0.1:8080/api/v1/auth/me' \
|
|
-H 'accept: application/json' \
|
|
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo2LCJlbWFpbCI6ImJleWhhbkBiZXloYW4uZGV2IiwiaXNfYWRtaW4iOnRydWUsImZpcnN0X25hbWUiOiJCZXloYW4iLCJsYXN0X25hbWUiOiJPxJ91ciIsInRva2VuX3R5cGUiOiJhY2Nlc3MiLCJzdWIiOiI2IiwiZXhwIjoxNzcxNzAyMTU2LCJpYXQiOjE3NzE2OTQ5NTZ9.QHid2xqKsdwe1E-vkrZLA7nB_qL3DEcEWztbkFoOaZU'
|
|
```
|
|
|
|
### Request URL
|
|
|
|
```
|
|
http://127.0.0.1:8080/api/v1/auth/me
|
|
```
|
|
|
|
---
|
|
|
|
### Server Response
|
|
|
|
| Code | Details |
|
|
|------|---------|
|
|
| 200 | Success |
|
|
|
|
#### Response Body
|
|
|
|
```json
|
|
{
|
|
"user": {
|
|
"email": "beyhan@beyhan.dev",
|
|
"first_name": "Beyhan",
|
|
"id": 6,
|
|
"is_admin": true,
|
|
"last_name": "Oğur"
|
|
}
|
|
}
|
|
```
|
|
|
|
#####################################
|
|
|
|
## POST Request
|
|
|
|
Refrsfh Token
|
|
|
|
```bash
|
|
curl -X 'POST' \
|
|
'http://127.0.0.1:8080/api/v1/auth/refresh' \
|
|
-H 'accept: application/json' \
|
|
-H 'Content-Type: application/json' \
|
|
-d '{
|
|
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo2LCJlbWFpbCI6ImJleWhhbkBiZXloYW4uZGV2IiwiaXNfYWRtaW4iOnRydWUsImZpcnN0X25hbWUiOiJCZXloYW4iLCJsYXN0X25hbWUiOiJPxJ91ciIsInRva2VuX3R5cGUiOiJyZWZyZXNoIiwic3ViIjoiNiIsImV4cCI6MTc3NDI4Njk1NiwiaWF0IjoxNzcxNjk0OTU2fQ.IiVn9tmnItk_mmB5Hfp0dRJL_jFHlvp68hDvJROeGqo"
|
|
}'
|
|
```
|
|
|
|
### Request URL
|
|
|
|
```
|
|
http://127.0.0.1:8080/api/v1/auth/refresh
|
|
```
|
|
|
|
---
|
|
|
|
### Server Response
|
|
|
|
| Code | Details |
|
|
|------|---------|
|
|
| 200 | Success |
|
|
|
|
#### Response Body
|
|
|
|
```json
|
|
{
|
|
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo2LCJlbWFpbCI6ImJleWhhbkBiZXloYW4uZGV2IiwiaXNfYWRtaW4iOnRydWUsImZpcnN0X25hbWUiOiJCZXloYW4iLCJsYXN0X25hbWUiOiJPxJ91ciIsInRva2VuX3R5cGUiOiJhY2Nlc3MiLCJzdWIiOiI2IiwiZXhwIjoxNzcxNzAyMzQwLCJpYXQiOjE3NzE2OTUxNDB9.0RqIfDNY3Tc--Waaztgh2dOeKAxpUKWEPfN86SK7kOw",
|
|
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo2LCJlbWFpbCI6ImJleWhhbkBiZXloYW4uZGV2IiwiaXNfYWRtaW4iOnRydWUsImZpcnN0X25hbWUiOiJCZXloYW4iLCJsYXN0X25hbWUiOiJPxJ91ciIsInRva2VuX3R5cGUiOiJyZWZyZXNoIiwic3ViIjoiNiIsImV4cCI6MTc3NDI4NzE0MCwiaWF0IjoxNzcxNjk1MTQwfQ.bZkKmx-4KvlSy4A1Hf9YU5hZAV4e9HQfjtnbyG1PYwY"
|
|
}
|
|
```
|
|
|
|
## POST Request
|
|
|
|
Register
|
|
|
|
```bash
|
|
curl -X 'POST' \
|
|
'http://127.0.0.1:8080/api/v1/auth/register' \
|
|
-H 'accept: application/json' \
|
|
-H 'Content-Type: application/json' \
|
|
-d '{
|
|
"email": "aresss1234@ddddd.com",
|
|
"first_name": "adi",
|
|
"last_name": "soyadi",
|
|
"password": "password",
|
|
"username": "username"
|
|
}'
|
|
```
|
|
|
|
### Request URL
|
|
|
|
```
|
|
http://127.0.0.1:8080/api/v1/auth/register
|
|
```
|
|
|
|
---
|
|
|
|
### Server Response
|
|
|
|
| Code | Details |
|
|
|------|---------|
|
|
| 201 | Created |
|
|
|
|
#### Response Body
|
|
|
|
```json
|
|
{
|
|
"message": "registration successful, please verify your email before login",
|
|
"user": {
|
|
"email": "aresss1234@ddddd.com",
|
|
"email_verified": false,
|
|
"first_name": "adi",
|
|
"id": 44,
|
|
"is_admin": false,
|
|
"last_name": "soyadi",
|
|
"username": "username"
|
|
}
|
|
}
|
|
```
|
|
####################
|
|
|
|
email Doğrulama
|
|
|
|
## GET Request
|
|
|
|
```bash
|
|
curl -X 'GET' \
|
|
'http://127.0.0.1:8080/api/v1/auth/verify-email?token=7f9e5f4d2036e1194856cc1184f0ffbeb86480ecc08d2c5ca18e6da1de0bf829' \
|
|
-H 'accept: application/json'
|
|
```
|
|
|
|
### Request URL
|
|
|
|
```
|
|
http://127.0.0.1:8080/api/v1/auth/verify-email?token=7f9e5f4d2036e1194856cc1184f0ffbeb86480ecc08d2c5ca18e6da1de0bf829
|
|
```
|
|
|
|
---
|
|
|
|
### Server Response
|
|
|
|
| Code | Details |
|
|
|------|---------|
|
|
| 200 | Success |
|
|
|
|
#### Response Body
|
|
|
|
```json
|
|
{
|
|
"message": "email verified successfully"
|
|
}
|
|
```
|
|
|
|
Resent Email dogrulamasi
|
|
|
|
url -X 'POST' \
|
|
'http://127.0.0.1:8080/api/v1/auth/resend-verification' \
|
|
-H 'accept: application/json' \
|
|
-H 'Content-Type: application/json' \
|
|
-d '{
|
|
"email": "aressfsdfss1234@ddddd.com"
|
|
}'
|
|
|
|
Request URL
|
|
|
|
http://127.0.0.1:8080/api/v1/auth/resend-verification
|
|
|
|
################################
|
|
|
|
## Prompt: Next.js Login/Register Pages with Turnstile Protection
|
|
|
|
**Task:**
|
|
Using the dependencies and devDependencies listed below, design and implement Login and Register pages for a Next.js application. Both pages should be protected with Turnstile (Cloudflare's CAPTCHA alternative).
|
|
|
|
---
|
|
|
|
### Dependencies
|
|
|
|
```json
|
|
{
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"lucide-react": "^0.575.0",
|
|
"next": "16.1.6",
|
|
"next-themes": "^0.4.6",
|
|
"radix-ui": "^1.4.3",
|
|
"react": "19.2.3",
|
|
"react-dom": "19.2.3",
|
|
"tailwind-merge": "^3.5.0"
|
|
}
|
|
```
|
|
|
|
### DevDependencies
|
|
|
|
```json
|
|
{
|
|
"@tailwindcss/postcss": "^4",
|
|
"@types/node": "^20",
|
|
"@types/react": "^19",
|
|
"@types/react-dom": "^19",
|
|
"eslint": "^9",
|
|
"eslint-config-next": "16.1.6",
|
|
"shadcn": "^3.8.5",
|
|
"tailwindcss": "^4",
|
|
"tw-animate-css": "^1.4.0",
|
|
"typescript": "^5"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### Requirements
|
|
|
|
1. **Design modern, responsive Login and Register pages using Next.js, React, Radix UI, and TailwindCSS utilities.**
|
|
2. **Use Cloudflare Turnstile to protect both forms (login & register) from bot abuse.**
|
|
3. **Leverage shadcn UI and lucide-react for enhanced UI and icons.**
|
|
4. **Apply type safety using TypeScript and provide user feedback for validation/errors.**
|
|
5. **Use best practices for modularity, accessibility (a11y), and theming (next-themes).**
|
|
6. **Add animations with tw-animate-css for user interactions (e.g., button hover/submission feedback).**
|
|
7. **Style using tailwind-merge, class-variance-authority, and clsx for dynamic class management.**
|
|
8. **Lint and format with the provided ESLint setup.**
|
|
|
|
---
|
|
|
|
**Extra:**
|
|
- Ensure proper email/password validation and error handling.
|
|
- Make the UI adaptive for light/dark themes.
|
|
- Provide a clear description in TypeScript doc comments.
|
|
|
|
---
|
|
|
|
|
|
**References:**
|
|
- [Cloudflare Turnstile Docs](https://developers.cloudflare.com/turnstile/)
|
|
- [shadcn UI](https://ui.shadcn.com/)
|
|
- [Radix UI](https://www.radix-ui.com/)
|
|
|
|
--- |