๐ŸŒŸ ํ”„๋กœํ•„ ์—…๋ฐ์ดํŠธ

summereuna๐Ÿฅยท2022๋…„ 5์›” 25์ผ

๐ŸŒŸ Twinkle (React, Firebase)

๋ชฉ๋ก ๋ณด๊ธฐ
23/42

ํ—ค๋” ๋„ค๋น„๊ฒŒ์ด์…˜์˜ ํ”„๋กœํ•„์— ์œ ์ € ์ด๋ฆ„ ์ถ”๊ฐ€ํ•˜๊ธฐ


์œ ์ € ํ”„๋กœํ•„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ ๊ฐฑ์‹ ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ๊ทธ๋•Œ ํŽธํ•˜๋ผ๊ณ  ๋„ค๋น„๊ฒŒ์ด์…˜์—๋„ userObj๋ฅผ ๋ณด๋‚ด์„œ ์œ ์ € ์ •๋ณด๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•ด ๋ณด์ž!

1. Navigation ์ปดํฌ๋„ŒํŠธ์— prop์œผ๋กœ userObj ๋ณด๋‚ด๊ธฐ

๐Ÿ“ src/components/Router.js

const AppRouter = ({ isLoggedIn, userObj }) => {
  return (
    <Router>
      {isLoggedIn && <Navigation userObj={userObj} />}
      <Routes>

2. userObj๋ฅผ prop์œผ๋กœ ๋ฐ›์•„์„œ displayName ์‚ฌ์šฉ

๐Ÿ“ src/components/Navigation.js

import { Link } from "react-router-dom";

const Navigation = ({ userObj }) => (
  <nav>
    <ul>
      <li>
        <Link to="/">ํ™ˆ</Link>
      </li>
      <li>
        <Link to="/profile">{userObj.displayName}์˜ ํ”„๋กœํ•„</Link>
      </li>
    </ul>
  </nav>
);

export default Navigation;

์ด๋Ÿฐ์‹์œผ๋กœ ์œ ์ €์˜ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœํ•„ ์ˆ˜์ •ํ•˜๊ธฐ


1. ์ˆ˜์ •ํ•˜๋Š” form ๋งŒ๋“ค๊ธฐ

๐Ÿ“ src/routes/Profiles.js

<form onSubmit={onSubmit}>
  <input
    onChange={onChange}
    type="text"
    placeholder="์ด๋ฆ„"
    value={newDisplayName}
    />
  <input type="submit" value="์ €์žฅ" />
</form>

2. updateProfile() ๋ฉ”์„œ๋“œ๋กœ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

์‚ฌ์šฉ์ž์˜ ํ‘œ์‹œ ์ด๋ฆ„displayName ๋ฐ ํ”„๋กœํ•„ ์‚ฌ์ง„ URLphotoURL ๋“ฑ์˜ ๊ธฐ๋ณธ ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ๋Š” updateProfile() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

  • updateProfile
    updateProfile ( profile : { displayName ?: string | null ; photoURL ?: string | null } ) : Promise < void >
  • ์˜ˆ์‹œ
import { getAuth, updateProfile } from "firebase/auth";
const auth = getAuth();
updateProfile(auth.currentUser, {
  displayName: "Jane Q. User", photoURL: "https://example.com/jane-q-user/profile.jpg"
}).then(() => {
  // Profile updated!
  // ...
}).catch((error) => {
  // An error occurred
  // ...
});

์ฐธ๊ณ  ๋ฌธ์„œ

๋ณด๋‹ค์‹œํ”ผ updateProfile()์€ ์‚ฌ์šฉ์ž์˜ displayName๊ณผ photoURL์„ ์—…๋ฐ์ดํŠธํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. ๋ณด๋‹ค ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค.

const [newDisplayName, setNewDisplayName] = useState(userObj.displayName);

  const onChange = (event) => {
    const {
      target: { value },
    } = event;
    setNewDisplayName(value);
  };

  const onSubmit = async (event) => {
    event.preventDefault();
    //์ด๋ฆ„ ์ˆ˜์ •ํ•˜๋ฉด updateProfile() ๋ฉ”์„œ๋“œ ์‚ฌ์šฉํ•ด ํ”„๋กœํ•„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ
    if (userObj.displayName !== newDisplayName) {
      //console.log(userObj.updateProfile);
      await updateProfile(userObj, { displayName: newDisplayName });
    }
  };

updateProfile()๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ง๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ displayName์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ๋‹ค. firestore์—์„œ users ์ฝœ๋ ‰์…˜ ๋งŒ๊ณ  ๋„ํ๋จผํŠธ ์ƒ์„ฑํ•ด์„œ ์œ ์ €์— ๊ด€ํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋‘ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์–ด์จ‹๋“  firebase.User์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ”„๋กœํ•„์˜ ์‚ฌ์šฉ์ž ํ‘œ์‹œ๋ช…์„ ๋ฐ”๊พธ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด ๋ณด์•˜๋‹ค.
updateProfile()๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์šฉ์ž ํ‘œ์‹œ๋ช…๊ณผ, ํ”„๋กœํ•„ ์‚ฌ์ง„ ๋‘๊ฐ€์ง€๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ”„๋กœํ•„ ์‚ฌ์ง„ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ๊ณผ ์ˆ˜์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด ๋ณด์ž!
1. ํ”„๋กœํ•„ ์‚ฌ์ง„ ์—…๋กœ๋“œ ํ•˜๋Š” ํผ ๋งŒ๋“ค๊ธฐ
2. profilePhoto ๋ฒ„์ผ“ ๋งŒ๋“ค์–ด์„œ
3. ๋‹ค์šด๋กœ๋“œ url ๊ฐ€์ ธ์™€์„œ ์œ„์— photoURL์— ๋„ฃ์–ด์ฃผ๋ฉด ๋จ

profile
Always have hope๐Ÿ€ & constant passion๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€