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