-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
oAuth, 로그인 유무 로직 구현 #86
Changes from 15 commits
5eb91fc
110c188
2af8139
be2c078
aec6afb
7bf4031
3b05363
09e9640
8cb010a
360f161
c14dc6a
01aa72a
292c387
c591ff6
4f00d6e
3f5865e
36d9fb4
5bd9bbd
53d65a8
d37014c
45d71c6
317b7b5
ad4d371
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,23 +1,27 @@ | ||
import api from './instance'; | ||
import { getCookie } from '@utils/cookies'; | ||
|
||
// 요청 인터셉터 | ||
api.interceptors.request.use(config => { | ||
//요청 성공 직전 호출 | ||
//헤더에 인가 토큰 부착 | ||
//로컬스토리지에 저장한다고 가정한다면 | ||
const accessToken: string | null = localStorage.getItem('Token'); | ||
if (accessToken !== null) { | ||
// 쿠키에서 accessToken 가져오기 | ||
const accessToken: string | undefined = getCookie('accessToken'); | ||
if (accessToken) { | ||
config.headers.Authorization = `Bearer ${accessToken}`; | ||
} | ||
|
||
return config; | ||
}); | ||
|
||
// 응답 인터셉터 | ||
api.interceptors.response.use( | ||
//http status가 200번대인 경우 호출 | ||
response => { | ||
// HTTP 상태 코드가 200번대인 경우 | ||
console.log(response); | ||
return response; | ||
}, | ||
error => { | ||
// HTTP 상태 코드가 에러인 경우 | ||
console.log(error); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 값 체크 후 테스트 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 원래 있었던 코드다 보니 지우면 안 되는 줄 알았습니다! 지우겠습니다~ There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아이고 예전에 남아있던 거였나보네요 ㅎㅎ There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. #86 (comment) |
||
//http status가 에러 코드인경우 실행 | ||
return Promise.reject(error); | ||
} | ||
); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// import { setCookie } from '@utils/cookies'; | ||
|
||
const BASE_URL = import.meta.env.VITE_BASE_URL; | ||
|
||
const handleLogin = (provider: 'google' | 'kakao' | 'github') => { | ||
const redirectUrl = `${BASE_URL}/auth/${provider}`; | ||
window.location.href = redirectUrl; | ||
|
||
// 테스트용 accessToken 및 refreshToken 생성 및 쿠키에 저장 (실제 Service에 배포할 때는 주석 달거나 삭제) | ||
// const fakeAccessToken = 'test.access.token'; | ||
// const fakeRefreshToken = 'test.refresh.token'; | ||
|
||
// setCookie('accessToken', fakeAccessToken, { path: '/', maxAge: 3600 }); // 1시간 유효 | ||
// setCookie('refreshToken', fakeRefreshToken, { | ||
// path: '/', | ||
// maxAge: 3600 * 24 * 30, | ||
// }); // 30일 유효 | ||
|
||
// alert('AccessToken 생성 완료: ' + fakeAccessToken); | ||
// alert('RefreshToken 생성 완료: ' + fakeRefreshToken); | ||
}; | ||
|
||
export default handleLogin; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
import { removeCookie } from '@utils/cookies'; | ||
|
||
const handleLogout = () => { | ||
removeCookie('accessToken'); | ||
removeCookie('refreshToken'); | ||
window.location.reload(); // 로그아웃 후 새로고침 | ||
}; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 새로고침 시, 토큰과, 쿠키가 없는 상태에서, 로그인이 필요한 페이지로 접근시 접근이 가능하거나 의도치 않은 오류가 발생할 수 있지 않나요?
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 사용자 편의성을 위해 단순히 로그아웃을 했을 때 그 페이지에 남게끔 하고 싶었습니다. 새로고침을 한 이유는 확실하게 쿠키를 날리고 난 뒤에 로그인/비로그인의 보이는 화면을 달리 하고 싶었던 것이었으나, 생각해보니 말씀하신 것처럼 import { removeCookie } from '@utils/cookies';
const handleLogout = () => {
removeCookie('accessToken');
removeCookie('refreshToken');
window.location.href = '/';
};
export default handleLogout; 이렇게 코드를 수정하겠습니다. 감사합니다! |
||
|
||
export default handleLogout; |
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
제가 알기로는 쿠키의 경우에는 서버에서 받아온 후 굳이 인터셉터에서 추가해주지 않더라도 자동으로 서버에게 전송되는것으로 알고있는데 이러한 로직을 추가하신 이유가 있을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저도 처음엔 그런 줄 알았으나
User
각각의 토큰이 백엔드에 저장이 따로 안 되기 때문에 요청 시에 유저의 토큰을 보내줘야 백엔드에서 그 토큰을 까서 작업을 해줄 수 있다고 합니다. 예를 들면, 만료시간이나 userImail 등이 있습니다.