//firebase.js => fbase.js로 바꿔주었다.
import "firebase/compat/auth";
authService.currentUser
를 호출한다. 이는 user가 있을 경우 없으면 null을 반환하는 원리를 이용해 코드를 작성한다.../../firebase/compat/auth
와 같은 상대경로가 아닌 위와 같은 절대 경로로 표현해줄 수 있게 된다. jsconfig.json
{
"compilerOptions":{
"baseUrl": "src"
},
"include":["src"]
}
export const authService = firebase.auth();
코드 수정 사항 최종 :
//Router.js
import React from "react";
import { HashRouter as Router , Route, Switch} from "react-router-dom";
import Auth from "../routes/Auth";
import Home from "../routes/Home";
const AppRouter = ({ isLoggedIn }) => {
return(
<Router>
<Switch>
{isLoggedIn ?
<>
<Route exact path="/">
<Home/>
</Route>
</>:
<Route exact path="/">
<Auth/>
</Route>
}
</Switch>
</Router>
)
};
export default AppRouter;
//App.js
import React, { useState} from "react"
import { authService } from "fbase";
import AppRouter from "components/Router";
function App() {
const [ isLoggedIn, setIsLoggedin ] = useState(authService.currentUser);
return (
<>
<AppRouter isLoggedIn={isLoggedIn}/>
<footer>© {new Date().getFullYear} Nwitter </footer>
</>
);
}
export default App;
//Auth.js 수정사항
import React, { useState } from "react";
const Auth = () => {
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
const onChange = (event) =>{
const {
target : { name, value}
} = event;
if(name ==="email"){
setEmail(value)
} else if (name==="password"){
setPassword(value)
}
};
const onSubmit = (event)=>{
event.preventDefault();
}
return(
<div>
<form onSubmit={onSubmit}>
<input
name = "email"
type="text"
placeholder="Email"
required
value = {email}
onChange={onChange}
/>
<input
name = "password"
type="password"
placeholder="Password"
required
value = {password}
onChange={onChange}
/>
<input type="submit" value = "Log In" />
</form>
<div>
<button>Continue with Google</button>
<button>Continue with Github</button>
</div>
</div>
)};
export default Auth
코드 설명 :
1. const를 통해서 email, password 변수를 추가하여 사용자가 입력하는 값을 전달하도록 함.
2. onChange 함수는 Hook으로 만든 함수인데 내부에서 입력되는 변수의 모형을 {name:value}에 해당하는 모형으로 바꿔주고 value에 값을 키보드가 입력될 때마다 저장하도록 함.
3. event.preventDefault()
: 사용하고 있는 사용자가 아닌 개발자가 관련된걸 컨트롤 할 수 있도록 보호하도록 하는 코드
authService.createUserWithEmailAndPassword
를 활용하여 email과 password로 된 계정을 생성할 수 있다. authService.signInWithEmailAndPassword
를 활용하여 로그인을 할 수 있다. //auth.js
import React, { useState } from "react";
import { authService } from "../fbase";
const Auth = () => {
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
const [newAccount, setNewAccount] = useState(true);
const onChange = (event) =>{
const {
target : { name, value}
} = event;
if(name ==="email"){
setEmail(value)
} else if (name==="password"){
setPassword(value)
}
};
const onSubmit = async(event)=>{
event.preventDefault();
if (newAccount) {
// create account
await authService.createUserWithEmailAndPassword(email, password);
} else {
// log in
await authService.signInWithEmailAndPassword(email, password);
}
}
return(
<div>
<form onSubmit={onSubmit}>
<input
name = "email"
type="text"
placeholder="Email"
required
value = {email}
onChange={onChange}
/>
<input
name = "password"
type="password"
placeholder="Password"
required
value = {password}
onChange={onChange}
/>
<input type="submit" value = { newAccount ? "Create Account" : "Log In"} />
</form>
<div>
<button>Continue with Google</button>
<button>Continue with Github</button>
</div>
</div>
)};
export default Auth
*모르는 내용에 대한 documentation을 검색하고 싶으면 https://firebase.google.com/docs/ 를 통해서 확인할 수 있다
출처: 노마드코더: 트위터 클론 코딩