사과먹는중
당근먹는하니
귀엽고 행복해
당근먹는하니
전체 방문자
오늘
어제
  • 분류 전체보기 (274)
    • 다람쥐🐿 (26)
    • C++ 공부빵야 (7)
    • 공부👻 (5)
    • 프론트엔드✏️ (228)
      • 코드캠프 (120)
      • 팀 프로젝트✨ (31)
      • 개인공부 (67)
    • 프론트엔드 - 바닐라js (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • graphql
  • ssg
  • algorithm
  • 프로그래머스
  • javascript
  • React-hook-form
  • 코드캠프
  • 자바스크립트
  • 코딩 부트캠프
  • emotion
  • typescript
  • 알고리즘
  • 코딩
  • 배포
  • refreshtoken
  • 리액트
  • 공통 컴포넌트
  • HTML
  • CSS
  • 팀프로젝트
  • 프론트엔드
  • 팀플
  • 부트캠프
  • 회고
  • next.js
  • 배열
  • 팀 프로젝트
  • JS
  • react
  • javascrpit

최근 댓글

최근 글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
당근먹는하니
프론트엔드✏️/개인공부

[firebase] googleLogin()

프론트엔드✏️/개인공부

[firebase] googleLogin()

2023. 2. 7. 13:43
728x90
반응형
export async function googleLogin() {
  return signInWithPopup(auth, googleProvider)
    .then((result) => {
      const user = result.user;
      return user;
    })
    .catch((error) => {
      console.error(error);
    });
}
  googleLogin().then((user) => setUser(user));

googleLogin에 성공하면 user가 전달될 것임(함수 부분에서 return user했음)

그걸로 setUser하겠다! 

  googleLogin().then(setUser);

이렇게 간략하게 표시가능하다. 

 

 

오랜만에 블로그...

요즘은 블로그 할 정신이 없었다.

음... 이건 핑계인 것 같고 그냥 공부가 하기 싫었다.

 

쉬면서 까치 얘기랑 일상 기록을 하려고 했는데 까먹었다. 

일기 보고 몰아서 써봐야지,,, ! 이런 기회를 주신 ㅃ님께 감사를 

 

최종 로그인 코드

 

// src/api/firebase.js

import { initializeApp } from "firebase/app";
import {
  getAuth,
  signInWithPopup,
  GoogleAuthProvider,
  signOut,
  onAuthStateChanged,
} from "firebase/auth";

const firebaseConfig = {
  apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
  authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,
  databaseURL: process.env.NEXT_PUBLIC_FIREBASE_DB_URL,
  projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
};

const app = initializeApp(firebaseConfig);
const googleProvider = new GoogleAuthProvider();
export const auth = getAuth(app);

export async function googleLogin() {
  return signInWithPopup(auth, googleProvider).catch((error) => {
    console.error(error);
  });
}

export async function googleLogout() {
  return signOut(auth).catch((error) => console.log(error));
}

export function onUserStateChange(callback) {
  onAuthStateChanged(auth, (user) => {
    callback(user);
  });
}

 

// LayoutHeader.tsx

import { googleLogin, googleLogout, onUserStateChange } from "@/api/firebase";
import User from "@/components/units/user/User";
import Link from "next/link";
import React, { useEffect, useState } from "react";
import { HiShoppingCart } from "react-icons/hi";

export default function Header() {
  const [user, setUser] = useState<any>();

  useEffect(() => {
    onUserStateChange((user: any) => {
      setUser(user);
    });
  }, []);
  
  return (
    <header className="flex flex-row justify-between items-center">
      <Link href="/">
        <p className="text-xl font-semibold">Beanmarket</p>
      </Link>
      <nav className="flex items-center gap-4">
        <p>장바구니</p>
        <HiShoppingCart />
        <a href="/product/register">상품등록</a>
        {user ? (
          <>
            <User user={user} />
            <button onClick={googleLogin}>로그아웃</button>
          </>
        ) : (
          <button onClick={googleLogout}>로그인</button>
        )}
      </nav>
    </header>
  );
}

 


 

1. 로그인, 로그아웃 구분해서 carts 보여주고 숨기기

2. admin에 따라서 작성 아이콘 보여주고 숨기기 - realtime database 

 

1 -> user 있으면 보여주고 없으면 안 보여주면 되지 않나??

2 -> 

 

import { getDatabase } from "firebase/database";

...

const app = initializeApp(firebaseConfig);


const database = getDatabase(app);
export function writeUserData(userId) {
  const db = getDatabase();
  set(ref(db, "users" + userId), {
    userId,
  });
}

 

db에 admins라는 이름으로 admin id들을 저장함... -> 어디서 저장...? 내가 그냥 직접 써주면 되나? 

로그인 하면 db의 admins 목록에 있는지 확인함... -> 그래 해보겠음,... 

있으면 admin 없으면 일반 회원... 

 

 

0207

읽는 것까진 했는데 값 비교가 안됨

 

 

728x90
반응형
저작자표시 비영리 동일조건 (새창열림)

'프론트엔드✏️ > 개인공부' 카테고리의 다른 글

[react] 계산기/새로고침해도 선택값 유지하기  (0) 2023.03.03
[react] 리액트 리렌더링  (0) 2023.03.02
[Next.js] tailwind 설치  (0) 2023.01.19
[youtube] useNavigate(), useLocation(), 유튜브 끝  (0) 2023.01.17
[youtube] tailwind grid auto-fill, router, axios 리팩토링  (0) 2023.01.13
    '프론트엔드✏️/개인공부' 카테고리의 다른 글
    • [react] 계산기/새로고침해도 선택값 유지하기
    • [react] 리액트 리렌더링
    • [Next.js] tailwind 설치
    • [youtube] useNavigate(), useLocation(), 유튜브 끝
    당근먹는하니
    당근먹는하니

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.