ํ๋กํ์์ ์ ์ ๋ช ์ ๋ฐ์ดํธ ์ ํค๋์ ์ ํ ์ ์ ๋ช ์ด ๋ฐ๋ก ์ ๋ฐ์ดํธ๊ฐ ๋์ง ์๋๋ค.
ํ๋กํ ์ ์ ๋ช
์
๋ฐ์ดํธ๋ updateProfile() ๋ฉ์๋๋ฅผ ํตํ์ฌ userObj๋ฅผ ์
๋ฐ์ดํธ ํ๊ณ ์๋ค.
์ด๋ firebase์ ์๋ ์ ์ ์ค๋ธ์ ํธ๋ฅผ ์
๋ฐ์ดํธ ํ๋ ๊ฒ์ด๋ค.
์ด์ ๋ฐํด ํค๋์ ๋ค๋น๊ฒ์ด์
์ ์ ํ ์ ์ ๋ช
์ prop์ผ๋ก userObj(App.js์ ๋ง๋ค์ด๋ state useObj) ์ฆ ๋ฆฌ์กํธ๋ฅผ ๋ฆฌ์ค๋ํ๊ณ ์๋ค.
authService.currentUser.uid ์ด๋ฐ์์ผ๋ก๋ ์ฌ์ฉํ๋ฉด ๋๋๋ฐ ์ ๊ตณ์ด userObj๋ฅผ prop์ผ๋ก ์ฌ๊ธฐ์ ๊ธฐ ๊ณต์ ํ๋ฉฐ ์ฌ์ฉํ๋๋ฉด ์์ค๋ฅผ ํ๋๋ก ํต์ผํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ๊ฒ ํ๋ฉด userObj์ ์ ๋ณด ๋ณํ๋ง์ผ๋ก๋ ์ ์ฒด์ ์ํฅ์ ์ค์ ์๊ธฐ ๋๋ฌธ์ ๊ฒฐ๋ก ์ ์ผ๋ก ๋ ๊น๋ํ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
userObj๋ App.js์์ ์์๋๋ค.
๊ทธ๋ค์ ๋ผ์ฐํฐ๋ก ๋ณด๋ด์ ธ์ > home / profile / navigation์ ์ ์ฉ๋๋ค.
์ฌ๊ธฐ์ ์ ๊น ๋ฆฌ์กํธ์ ํน์ง์ ์๊ฐํด๋ณด์.
๋ฆฌ์กํธ๋ ์๋ก์ด ์ ๋ณด๋ฅผ ์ ์ฉํ๊ฑฐ๋ ์ํ์ ๋ณํ๊ฐ ์์ ๋ ์ ์ ๋ณด๋ฅผ ์ธ์ํ ํ ๋ชจ๋ ์์๋ฅผ ๋ฆฌ๋ ๋๋งํ๋ค!
์ฆ, userObj์ ์๋ก์ด ์ํ๋ฅผ ์ ์ฉ์ํค๋ฉด ์ ์ฒด์ ๋ณํ๋ฅผ ์ค ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด user๋ฅผ ์๋ก๊ณ ์นจํด์ฃผ๋ ์๋ก์ด function์ ๋ง๋ค์ด ๋ณด์.
onAuthStateChanged(auth, async (user) => {
if (user) {
if (user.displayName === null) {
await updateProfile(user, { displayName: "์ ์ " });
}
//๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ๋ํ user ์ค๋ธ์ ํธ๋ฅผ userObj ์ํ์ ๋ฃ์ด ์ฃผ์.
setUserObj(user);
} else {
setUserObj(null);
}
//์ด๊ธฐํ
setInit(true);
});
}, []);
//๐ฅ user ์๋ก๊ณ ์นจํ๋ ๊ธฐ๋ฅ: firebase์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ react.js์ userObj ์
๋ฐ์ดํธ ํ๊ธฐ
const refreshUser = async () => {
const user = authService.currentUser;
setUserObj(Object.assign({ ...user }));
};
//
return(
<>
{init ? (
<AppRouter
isLoggedIn={Boolean(userObj)}
userObj={userObj}
refreshUser={refreshUser}
/>
//
//
const AppRouter = ({ refreshUser, isLoggedIn, userObj }) => {
//
return (
//
<Route
path="/profile"
element={<Profile userObj={userObj} refreshUser={refreshUser} />}
></Route>
//
//
const Profile = ({ refreshUser, userObj }) => {
//
const onSubmit = async (event) => {
event.preventDefault();
//1. firebase์ ์๋ profile ์
๋ฐ์ดํธ
if (userObj.displayName !== newDisplayName) {
await updateProfile(userObj, {
displayName: newDisplayName,
});
//2. ๊ทธ๋ฌ๊ณ ๋์ react.js์ ์๋ ์ ์ ๋ช
๋ ์๋ก๊ณ ์นจ๋๊ฒ ํ๊ธฐ
refreshUser();
}
};
์.. ์ค๋ฅ ์์ด ์๋๋์ค ์์๋๋ฐ ์ฌ๊ฑธ..
์ ์ ๋ช
์ ํ ๋ฒ ๋ ๋ฐ๊พธ๋ ค๊ณ ํ๋ ์ด๋ฐ ์ค๋ฅ๊ฐ ๊ณ์ ๋ฌ๋ค.
โ ๏ธ Uncaught (in promise) TypeError: userInternal.getIdToken is not a function.
์ผ๋จ ๋ค๋ฅธ ๋ง์ ๋ถ๋ค์ด ์๋ํ๋๋ก onSubmit ํ์ ์์ updateProfile ๋์์ authService.currentUser๋ก ํด์ ํด๋ณด๋ ์ฝ๋๊ฐ ์์ฃผ ์ ๋์๊ฐ๋ ๊ฒ ์ฒ๋ผ ๋ณด์๋ค.
๊ทธ๋ฐ๋ฐ ๋ด ๋ชฉ์ ๋๋ก์ธ userObj๋ฅผ ๊ฐ๋ค๊ฐ ์ฐ์ง๋ฅผ ๋ชปํ๋ ๋ญ๊ฐ ์๋๊ฑฐ ๊ฐ์์ ๋จ๊ณ๋ณ๋ก ์ฝ์์ ์ฐ์ด๋ณด๋ ์๋๋ ๋ค๋ฅผ๊น ์ฒซ ๋ฒ์งธ ๋ณ๊ฒฝ ์ดํ, ๋ ๋ฒ์งธ ์ ์ ๋ช ๋ณ๊ฒฝ ๋ ๋ถํฐ๋ auth์ currentUser๋ ๋ฐ๋ก๋ฐ๋ก ์ ๋ณ๊ฒฝ๋์ง๋ง userObj๋ ํ ๋ฐ์ ๋ฆ๊ฒ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
์ด๊ฑด ๋ด๊ฐ ์ํ๋๊ฒ ์๋์ฌ.. ใ
ใ
ใ
ใ
์ใ
์์
ํ๋ ๋์ค ์ด๋ค ์ ์ ์ ๋๊ธ์ ๋ณด๊ณ ๊ทธ๋ฅ ๋๋ ์ด๋ ๊ฒ ํด์ผ ๊ฒ ๋ค ์ถ์ด์ ์ผ๋จ ์๋ ๊ฒ ํ๊ณ ๋์ด๊ฐ๊ธฐ๋ก ํ๋ค.
๊ทธ๋ฅ ์์๋ก ๋ฆฌ๋ ๋๋ง ํ๋ฒ ๋ ์์ผ์ ๋ง์ถฐ๋ฒ๋ฆฌ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ ๊ฒ.
//์ค๋ก์ง refresh๋ง์ ์ํ state
const [, setNewName] = useState("");
const refreshUser = async () => {
setNewName(userObj.displayName);
};
๋์ค์ ์ userInternal.getIdToken is not a function ์ค๋ฅ๊ฐ ๋จ๋์ง๋ ์์๋ด์ผ ๊ฒ ๋ค. ์ง๊ธ ๋ด ์ง์์ผ๋ก๋ ํ๊ณ์ ๋๋๋ฆฌ ๋ถ๋ชํ๊ธฐ ๋๋ฌธ์ ์ผ๋จ ๋์ด๊ฐ๋ค...ํ ใ ใ ...