작성
·
28
0
안녕하세요 강사님!
강사님께서 해당 강의에서 작성해주신대로
우선 Database와 백엔드서버를 구동시킨 채로 프론트엔드 서버를 npx react-native run-ios
로 어플을 빌드하고
로그아웃 버튼을 클릭했을때 위의 이미지와 같이 401에러가 발생합니다.
제가 작성한 코드를 보여드리면
src/hooks/queries/useAuth.ts
function useLogout(mutationOptions?: UseMutationCustomOptions) {
return useMutation({
mutationFn: logout,
onSuccess: () => {
console.log('useLogout onSuccess');
removeHeader('Authorization');
removeEncryptStorage(storageKeys.REFRESH_TOKEN);
},
onSettled: () => {
// auth에 해당하는 쿼리들을 캐시 무효화해서 업데이트
queryClient.invalidateQueries({queryKey: [queryKeys.AUTH]});
},
...mutationOptions,
});
}
function useAuth() {
const logoutMutation = useLogout();
return {
logoutMutation,
};
}
export default useAuth;
src/api/auth.ts
const logout = async () => {
console.log('logout API call');
try {
await axiosInstance.post('/auth/logout');
} catch (err) {
console.error(`logout api err :::: ${err}`);
}
};
export { logout };
3. src/api/axios.ts
import axios from 'axios';
const axiosInstance = axios.create({
baseURL: 'http://localhost:3030',
withCredentials: true,
});
export default axiosInstance;
src/utils/header.ts
import axiosInstance from '../api/axios';
function setHeader(key: string, value: string) {
axiosInstance.defaults.headers.common[key] = value;
}
function removeHeader(key: string) {
if (!axiosInstance.defaults.headers.common[key]) {
return;
}
delete axiosInstance.defaults.headers.common[key];
}
export {setHeader, removeHeader};
src/screens/map/MapHomeScreen.tsx
import React from 'react';
import {Button, StyleSheet, Text, View} from 'react-native';
import useAuth from '../../hooks/queries/useAuth';
const MapHomeScreen = () => {
const {logoutMutation} = useAuth();
return (
<View>
<Text>맵 스크린</Text>
<Button title="로그아웃" onPress={() => logoutMutation.mutate(null)} />
</View>
);
};
const styles = StyleSheet.create({});
export default MapHomeScreen;
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다.
로그아웃 기능을 구현하는 도중 401 Unauthorized 에러가 발생하는 문제에 대해 설명드리겠습니다. 로그아웃 시 401 에러가 발생하는 원인은 여러 가지가 있으며, 주로 인증 헤더 누락이나 서버측의 인증 처리 문제로 인해 발생할 수 있습니다. 이 문제를 해결하기 위해 다음 사항들을 점검해 보시길 권장드립니다:
인증 헤더 확인:
Authorization
헤더가 포함된 요청을 요구하지 않는지 확인하시기 바랍니다. 로그아웃 시 인증이 필요하다면 로그아웃 호출 전에 헤더를 설정해야 합니다.Axios 인스턴스 설정:
axiosInstance
가 생성될 때 baseURL
과 함께 인증 관련 설정이 제대로 되어 있는지, 서버가 인증을 필요로 하는 경우 적절한 헤더가 포함되어 있는지 확인합니다.Authorization
헤더가 필요하지 않다면, 로컬 캐시나 스토리지에서도 관련 토큰이 지워지는지 확인해 보세요.서버 로그 확인:
토큰 유효성:
관련하여 기존에 유사한 문제를 다룬 답변들을 확인하실 수 있습니다:
- 로그아웃 관련해서 질문 있습니다.
- 로그아웃 코드 관련해서 질문드립니다.
위 언급된 항목들을 점검하면서 문제의 원인을 찾고 해결하는 데 도움이 되길 바랍니다. 로그아웃 프로세스 내에서 서버에 적절한 인증 및 인증 해제 요청이 제대로 전달되는지 확인하는 것이 중요합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.