use cookie to send refreshToken
This commit is contained in:
		
							parent
							
								
									f7d80956da
								
							
						
					
					
						commit
						3a3f427daa
					
				| @ -5,17 +5,16 @@ import { | ||||
|   RegisterInputDto, | ||||
|   ForgetPasswordInputDto, | ||||
|   DeleteUser, | ||||
|   Token, | ||||
|   TokenRefreshPayload, | ||||
|   AccessToken, | ||||
|   User, | ||||
| } from './user.interface' | ||||
| 
 | ||||
| export async function register(data: RegisterInputDto) { | ||||
|   return axios.post<Token>('/api/users', data) | ||||
|   return axios.post<AccessToken>('/api/users', data) | ||||
| } | ||||
| 
 | ||||
| export async function login(data: LoginInputDto) { | ||||
|   return axios.post<Token>('/api/users/token', data) | ||||
|   return axios.post<AccessToken>('/api/users/token', data) | ||||
| } | ||||
| 
 | ||||
| export async function logout() { | ||||
| @ -23,17 +22,17 @@ export async function logout() { | ||||
| } | ||||
| 
 | ||||
| export async function forgetPassword(data: ForgetPasswordInputDto) { | ||||
|   return axios.patch<Token>('/api/users/password', data) | ||||
|   return axios.patch<AccessToken>('/api/users/password', data) | ||||
| } | ||||
| 
 | ||||
| export async function deleteUser(data: DeleteUser) { | ||||
|   return axios.delete('/api/users/me', { data }) | ||||
| } | ||||
| 
 | ||||
| let refreshing: Promise<AxiosResponse<Token>> | null | ||||
| export async function refreshToken(data: TokenRefreshPayload) { | ||||
| let refreshing: Promise<AxiosResponse<AccessToken>> | null | ||||
| export async function refreshToken() { | ||||
|   if (!refreshing) { | ||||
|     refreshing = axios.put<Token>('/api/users/me/token', data).finally(() => { | ||||
|     refreshing = axios.put<AccessToken>('/api/users/me/token').finally(() => { | ||||
|       refreshing = null | ||||
|     }) | ||||
|   } | ||||
|  | ||||
| @ -23,14 +23,7 @@ export interface DeleteUser extends EmailVerifyDto { | ||||
|   password: string | ||||
| } | ||||
| 
 | ||||
| export interface Token { | ||||
|   accessToken: string | ||||
|   refreshToken: string | ||||
| } | ||||
| 
 | ||||
| export interface TokenRefreshPayload { | ||||
|   refreshToken: string | ||||
| } | ||||
| export type AccessToken = string | ||||
| 
 | ||||
| /** 用户 */ | ||||
| export interface User { | ||||
|  | ||||
| @ -38,7 +38,6 @@ export function DeleteUser() { | ||||
|     onSubmit: async (values) => { | ||||
|       await api.user.deleteUser(values) | ||||
|       localStorage.removeItem('accessToken') | ||||
|       localStorage.removeItem('refreshToken') | ||||
|       toast.success('用户删除成功') | ||||
|       router.push('/login') | ||||
|     }, | ||||
|  | ||||
| @ -34,8 +34,7 @@ export default function ForgetPassword() { | ||||
|     }), | ||||
|     onSubmit: async (values) => { | ||||
|       const res = await api.user.forgetPassword(values) | ||||
|       localStorage.setItem('accessToken', res.data.accessToken) | ||||
|       localStorage.setItem('refreshToken', res.data.refreshToken) | ||||
|       localStorage.setItem('accessToken', res.data) | ||||
|       toast.success('密码重置成功!', { | ||||
|         onClose: () => router.push('/login'), | ||||
|       }) | ||||
|  | ||||
| @ -30,7 +30,6 @@ export default function Home() { | ||||
|   async function logout() { | ||||
|     await api.user.logout() | ||||
|     localStorage.removeItem('accessToken') | ||||
|     localStorage.removeItem('refreshToken') | ||||
|     router.push('/login') | ||||
|   } | ||||
| 
 | ||||
|  | ||||
| @ -26,8 +26,7 @@ export default function Login() { | ||||
|     }), | ||||
|     onSubmit: async (values) => { | ||||
|       const res = await api.user.login(values) | ||||
|       localStorage.setItem('accessToken', res.data.accessToken) | ||||
|       localStorage.setItem('refreshToken', res.data.refreshToken) | ||||
|       localStorage.setItem('accessToken', res.data) | ||||
|       router.push('/') | ||||
|     }, | ||||
|   }) | ||||
|  | ||||
| @ -32,8 +32,7 @@ export default function Register() { | ||||
|     }), | ||||
|     onSubmit: async (values) => { | ||||
|       const res = await api.user.register(values) | ||||
|       localStorage.setItem('accessToken', res.data.accessToken) | ||||
|       localStorage.setItem('refreshToken', res.data.refreshToken) | ||||
|       localStorage.setItem('accessToken', res.data) | ||||
|       router.push('/') | ||||
|     }, | ||||
|   }) | ||||
|  | ||||
| @ -38,14 +38,11 @@ axios.interceptors.response.use( | ||||
|     } | ||||
|     switch (error.response?.status) { | ||||
|       case status.UNAUTHORIZED: { | ||||
|         const refreshToken = localStorage.getItem('refreshToken') | ||||
|         if (!refreshToken) { | ||||
|           Router.push('/login') | ||||
|           return Promise.reject(error) | ||||
|         if (error.config?.url === '/api/users/token') { | ||||
|           throw throwError(error) | ||||
|         } | ||||
|         const res = await api.user.refreshToken({ refreshToken }) | ||||
|         localStorage.setItem('accessToken', res.data.accessToken) | ||||
|         localStorage.setItem('refreshToken', res.data.refreshToken) | ||||
|         const res = await api.user.refreshToken() | ||||
|         localStorage.setItem('accessToken', res.data) | ||||
|         return error.config && axios.request(error.config) | ||||
|       } | ||||
|       default: { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user