211019コードキャンプ32日目
RefreshToken以前に学んだ
しかし、ほとんどのサイトではセキュリティなどの理由で有効期限が設定されています.
有効期限が過ぎた場合、
このため、 であれば、 でも RefreshTokenの適用
AccessToken
は、登録データを記録して登録の有無を判断することができる.しかし、ほとんどのサイトではセキュリティなどの理由で有効期限が設定されています.
有効期限が過ぎた場合、
AccessToken
が有効期限が切れた場合、新しいAccessToken
を受信するプロセスRefreshToken
って!AccessToken
の有効期限が1時間の場合、ユーザーは1時間ごとに再ログインする必要があります.そうなると、とても不便で探したくないサイトになるかもしれません.このため、
AccessToken
を発行する場合には、RefreshToken
を同時に発行することもできる.AccessToken
が期限切れになっても、RefreshToken
はこっそりユーザーにログインし、新しいAccessToken
を気兼ねなく入手し、ユーザーに自然なサイト利用を提供することができます.RefreshToken
は満期時間もあるので、RefreshToken
が満期になったら再登録します._app.js
useEffect(() => {
// const accessToken = localStorage.getItem("accessToken") || "";
// setAccessToken(accessToken); // 이 두줄은 로컬스토리지에 저장하는 방법
if (localStorage.getItem("refreshToken")) getAccessToken(setAccessToken);
}, []);
// 만약 로컬 스토리지에 refreshToken가 true 값으로 존재할 경우 AccessToken을 받아온다.
const errorLink = onError(({ graphQLErrors, operation, forward }) => {
// @apollo/client의 onError의 기능을 사용한다.
if (graphQLErrors) {
for (const err of graphQLErrors) {
if (err.extensions?.code === "UNAUTHENTICATED") {
operation.setContext({
headers: {
...operation.getContext().headers,
authorization: `Bearer ${getAccessToken(setAccessToken)}`,
},
});
return forward(operation);
}
}
}
});
const client = new ApolloClient({
link: ApolloLink.from([errorLink, uploadLink]), // 순서가 중요!
cache: new InMemoryCache(),
});
login.tsx
...
export default function LoginPage() {
...
async function onClickLogin() {
const result = await loginUser({
variables: {
email: myEmail,
password: myPassword,
},
});
localStorage.setItem("refreshToken", "true");
// LocalStorage에 refreshToken을 true값으로 저장해준다.
setAccessToken(result.data?.loginUserExample.accessToken);
router.push("/32-02-login-success");
}
...
return (
<>
이메일 : <input type="text" onChange={onChangeEmail} />
<br />
비밀번호 : <input type="password" onChange={onChangePassword} />
<br />
<button onClick={onClickLogin}>로그인하기</button>
</>
);
}
Reference
この問題について(211019コードキャンプ32日目), 我々は、より多くの情報をここで見つけました https://velog.io/@as5427072/211019-코드캠프-32일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol