💡 서버리스
서버가 없다는 뜻은 아니고, 그 서버를 직접 만들거나 관리할 필요가 없다는 뜻
💡 웹 개발은 어떤 식으로 할까?
👉 프론트 개발자 - 백엔드 개발자 협업의 경우
👉 백엔드 개발자가 없으면?
💡 firestore에 바로 파일 저장을 안하는 이유?
yarn add firebase
import {initializeApp} from 'firebase/app';
import {getAuth} from 'firebase/auth';
const firebaseConfig = {
apiKey: process.env.REACT_APP_FIREBASE_API_KEY,
authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN,
projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID,
appId: process.env.REACT_APP_FIREBASE_APP_ID,
};
// Initialize Firebase
const app = initializeApp(firebaseConfig);
export const auth = getAuth(app);
export default app;
//index.js
import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
import app from "./firebase";
console.log("app", app);
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<App />
);
import { initializeApp } from "firebase/app";
import { getAuth } from "firebase/auth";
const firebaseConfig = {
...
};
const app = initializeApp(firebaseConfig);
export const auth = getAuth(app);
createUserWithEmailAndPassword
함수를 이용해서 이메일과 패스워드를 입력하여 계정을 생성 (auth import 후 사용)createUserWithEmailAndPassword
함수는 비동기로 동작하며, Promise을 반환하므로 then과 catch 메서드를 통해서 각각 회원가입이 성공했을 때, 실패했을 때의 처리 로직을 구현할 수 있음import {auth} from '../shared/firebase';
const signUp = (event) => {
event.preventDefault();
createUserWithEmailAndPassword(auth, email, password)
.then((userCredential) => {
// 회원가입 성공시
console.log(userCredential);
})
.catch((error) => {
// 회원가입 실패시
console.error(error);
});
};
// 리팩토링
const signUp = async () => {
try {
const userCredential = await createUserWithEmailAndPassword(auth, email, password);
console.log(userCredential);
} catch (error) {
console.error(error);
}
}
onAuthStateChanged
는 첫번째 인자로 auth 값을, 두번째 인자로는 콜백 함수를 받음 =>// App.js
import {
createUserWithEmailAndPassword,
onAuthStateChanged,
} from "firebase/auth";
import { auth } from "./firebase";
...
const App = () => {
useEffect(() => {
onAuthStateChanged(auth, (user) => {
console.log("user", user); // 사용자 인증 정보가 변경될 때마다 해당 이벤트를 받아 처리합니다.
});
}, []);
}
const user = auth.currentUser
signInWithEmailAndPassword
함수를 이용해서 이메일과 패스워드를 입력해서 로그인const signIn = async (event) => {
event.preventDefault();
try {
const userCredential = await signInWithEmailAndPassword(
auth,
email,
password
);
console.log(userCredential);
} catch (error) {
console.error(error);
}
};
signOut
함수를 호출하는 것 만으로 로그아웃을 할 수 있음const logOut = async (event) => {
event.preventDefault();
await signOut(auth);
};