init: 项目初始化提交
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				CI / Test (ubuntu-latest) (push) Has been cancelled
				
			
		
			
				
	
				CI / Test (windows-latest) (push) Has been cancelled
				
			
		
			
				
	
				CI / Lint (ubuntu-latest) (push) Has been cancelled
				
			
		
			
				
	
				CI / Lint (windows-latest) (push) Has been cancelled
				
			
		
			
				
	
				CI / Check (ubuntu-latest) (push) Has been cancelled
				
			
		
			
				
	
				CI / Check (windows-latest) (push) Has been cancelled
				
			
		
			
				
	
				CodeQL / Analyze (${{ matrix.language }}) (none, javascript-typescript) (push) Has been cancelled
				
			
		
			
				
	
				Deploy Website on push / Deploy Push Playground Ftp (push) Has been cancelled
				
			
		
			
				
	
				Deploy Website on push / Deploy Push Docs Ftp (push) Has been cancelled
				
			
		
			
				
	
				Deploy Website on push / Deploy Push Antd Ftp (push) Has been cancelled
				
			
		
			
				
	
				Deploy Website on push / Deploy Push Element Ftp (push) Has been cancelled
				
			
		
			
				
	
				Deploy Website on push / Deploy Push Naive Ftp (push) Has been cancelled
				
			
		
			
				
	
				Release Drafter / update_release_draft (push) Has been cancelled
				
			
		
			
				
	
				CI / CI OK (push) Has been cancelled
				
			
		
			
				
	
				Deploy Website on push / Rerun on failure (push) Has been cancelled
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	CI / Test (ubuntu-latest) (push) Has been cancelled
				
			CI / Test (windows-latest) (push) Has been cancelled
				
			CI / Lint (ubuntu-latest) (push) Has been cancelled
				
			CI / Lint (windows-latest) (push) Has been cancelled
				
			CI / Check (ubuntu-latest) (push) Has been cancelled
				
			CI / Check (windows-latest) (push) Has been cancelled
				
			CodeQL / Analyze (${{ matrix.language }}) (none, javascript-typescript) (push) Has been cancelled
				
			Deploy Website on push / Deploy Push Playground Ftp (push) Has been cancelled
				
			Deploy Website on push / Deploy Push Docs Ftp (push) Has been cancelled
				
			Deploy Website on push / Deploy Push Antd Ftp (push) Has been cancelled
				
			Deploy Website on push / Deploy Push Element Ftp (push) Has been cancelled
				
			Deploy Website on push / Deploy Push Naive Ftp (push) Has been cancelled
				
			Release Drafter / update_release_draft (push) Has been cancelled
				
			CI / CI OK (push) Has been cancelled
				
			Deploy Website on push / Rerun on failure (push) Has been cancelled
				
			This commit is contained in:
		
							
								
								
									
										14
									
								
								apps/backend-mock/api/auth/codes.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								apps/backend-mock/api/auth/codes.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| import { verifyAccessToken } from '~/utils/jwt-utils'; | ||||
| import { unAuthorizedResponse } from '~/utils/response'; | ||||
|  | ||||
| export default eventHandler((event) => { | ||||
|   const userinfo = verifyAccessToken(event); | ||||
|   if (!userinfo) { | ||||
|     return unAuthorizedResponse(event); | ||||
|   } | ||||
|  | ||||
|   const codes = | ||||
|     MOCK_CODES.find((item) => item.username === userinfo.username)?.codes ?? []; | ||||
|  | ||||
|   return useResponseSuccess(codes); | ||||
| }); | ||||
							
								
								
									
										36
									
								
								apps/backend-mock/api/auth/login.post.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								apps/backend-mock/api/auth/login.post.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| import { | ||||
|   clearRefreshTokenCookie, | ||||
|   setRefreshTokenCookie, | ||||
| } from '~/utils/cookie-utils'; | ||||
| import { generateAccessToken, generateRefreshToken } from '~/utils/jwt-utils'; | ||||
| import { forbiddenResponse } from '~/utils/response'; | ||||
|  | ||||
| export default defineEventHandler(async (event) => { | ||||
|   const { password, username } = await readBody(event); | ||||
|   if (!password || !username) { | ||||
|     setResponseStatus(event, 400); | ||||
|     return useResponseError( | ||||
|       'BadRequestException', | ||||
|       'Username and password are required', | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   const findUser = MOCK_USERS.find( | ||||
|     (item) => item.username === username && item.password === password, | ||||
|   ); | ||||
|  | ||||
|   if (!findUser) { | ||||
|     clearRefreshTokenCookie(event); | ||||
|     return forbiddenResponse(event, 'Username or password is incorrect.'); | ||||
|   } | ||||
|  | ||||
|   const accessToken = generateAccessToken(findUser); | ||||
|   const refreshToken = generateRefreshToken(findUser); | ||||
|  | ||||
|   setRefreshTokenCookie(event, refreshToken); | ||||
|  | ||||
|   return useResponseSuccess({ | ||||
|     ...findUser, | ||||
|     accessToken, | ||||
|   }); | ||||
| }); | ||||
							
								
								
									
										15
									
								
								apps/backend-mock/api/auth/logout.post.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								apps/backend-mock/api/auth/logout.post.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| import { | ||||
|   clearRefreshTokenCookie, | ||||
|   getRefreshTokenFromCookie, | ||||
| } from '~/utils/cookie-utils'; | ||||
|  | ||||
| export default defineEventHandler(async (event) => { | ||||
|   const refreshToken = getRefreshTokenFromCookie(event); | ||||
|   if (!refreshToken) { | ||||
|     return useResponseSuccess(''); | ||||
|   } | ||||
|  | ||||
|   clearRefreshTokenCookie(event); | ||||
|  | ||||
|   return useResponseSuccess(''); | ||||
| }); | ||||
							
								
								
									
										33
									
								
								apps/backend-mock/api/auth/refresh.post.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								apps/backend-mock/api/auth/refresh.post.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| import { | ||||
|   clearRefreshTokenCookie, | ||||
|   getRefreshTokenFromCookie, | ||||
|   setRefreshTokenCookie, | ||||
| } from '~/utils/cookie-utils'; | ||||
| import { verifyRefreshToken } from '~/utils/jwt-utils'; | ||||
| import { forbiddenResponse } from '~/utils/response'; | ||||
|  | ||||
| export default defineEventHandler(async (event) => { | ||||
|   const refreshToken = getRefreshTokenFromCookie(event); | ||||
|   if (!refreshToken) { | ||||
|     return forbiddenResponse(event); | ||||
|   } | ||||
|  | ||||
|   clearRefreshTokenCookie(event); | ||||
|  | ||||
|   const userinfo = verifyRefreshToken(refreshToken); | ||||
|   if (!userinfo) { | ||||
|     return forbiddenResponse(event); | ||||
|   } | ||||
|  | ||||
|   const findUser = MOCK_USERS.find( | ||||
|     (item) => item.username === userinfo.username, | ||||
|   ); | ||||
|   if (!findUser) { | ||||
|     return forbiddenResponse(event); | ||||
|   } | ||||
|   const accessToken = generateAccessToken(findUser); | ||||
|  | ||||
|   setRefreshTokenCookie(event, refreshToken); | ||||
|  | ||||
|   return accessToken; | ||||
| }); | ||||
		Reference in New Issue
	
	Block a user