反応深化班2週目-2
22.04.17(日)-18(月)
スパルタ符号化クラブ反応深化班-第2週過程-2
認証の設定 Firebaseダッシュボードから認証までのEメール/パスワードエントリ を有効にします.
取付基礎 shared/firebase.jsでauth を構成する firebase.jsで作成したauth をインポート signupFB関数 を作成 auth.createUserWithEmailAndPassword()として登録 SignupコンポーネントsignupFBを呼び出す! 登録直後にdisplay nameを更新 ユーザー情報を更新し、ホーム に移動 firebase.jsで作成したauth をインポートリッドからloginFB関数 を作成 auth.SignInWithEmailAndPassword()を使用して にログインします. Login構成部品からLoginFBを呼び出す! リドスでユーザ情報を更新した後、ホームページ に移動するログイン時に、ログセッションのログイン状態に変更されます.(実施済み) Firebase認証鍵をエクスポートし、セッションでログインステータス をチェックして保持する. Fire Baseで、ログインステータスが正しいかどうかを確認します(LoginCheckFB)
スパルタ符号化クラブ反応深化班-第2週過程-2
◎ Firebase Authentication
認証の設定
取付
yarn add [email protected] # 아래 코드는 8버전을 기준으로 작성
import firebase from "firebase/app";
import "firebase/auth";
const firebaseConfig = {
// 인증정보!
};
firebase.initializeApp(firebaseConfig);
const auth = firebase.auth();
export { auth };
◇会員登録実施
const signupFB = (id, pwd, user_name) => {
return function (dispatch, getState, {history}){
auth
.createUserWithEmailAndPassword(id, pwd)
.then((user) => {
console.log(user); // 넘어오는 데이터 형식 확인
auth.currentUser.updateProfile({
displayName: user_name, // 5. 유저 데이터 업데이트
}).then(()=>{
dispatch(setUser({user_name: user_name, id: id, user_profile: ''})); // Client Action 진행
history.push('/'); // 페이지 이동
}).catch((error) => {
console.log(error);
});
})
.catch((error) => {
var errorCode = error.code;
var errorMessage = error.message;
console.log(errorCode, errorMessage);
// ..
});
}
}
◇ログイン実施
import { auth } from "../../shared/firebase";
import firebase from "firebase/app";
// middleware actions
// middleware actions
const loginFB = (id, pwd) => {
return function (dispatch, getState, { history }) {
auth.setPersistence(firebase.auth.Auth.Persistence.SESSION).then((res) => { // 세션 스토리지에 데이터 저장 (데이터 유지)
auth
.signInWithEmailAndPassword(id, pwd) // 로그인하기
.then((user) => {
dispatch(
setUser({
user_name: user.user.displayName,
id: id,
user_profile: "",
uid: user.user.uid,
})
); // Client 정보 변경을 위해 Action 을 Dispatch 함
history.push("/"); // 페이지 이동
})
.catch((error) => {
var errorCode = error.code;
var errorMessage = error.message;
console.log(errorCode, errorMessage);
});
});
};
};
◇ログインを維持
// src > redux > modules > user.js
// 새로고침 했을 때, 로그인 상태 확인
const loginCheckFB = () => {
return function (dispatch, getState, {history}){
auth.onAuthStateChanged((user) => {
if(user){
dispatch(
setUser({
user_name: user.displayName,
user_profile: "",
id: user.email,
uid: user.uid,
})
);
}else{
dispatch(logOut());
}
})
}
}
// App.js
import { useDispatch } from 'react-redux';
import { actionCreators as userActions } from '../redux/modules/user';
import { apiKey } from "../shared/firebase";
const dispatch = useDispatch();
const _session_key = `firebase:authUser:${apiKey}:[DEFAULT]`;
const is_session = sessionStorage.getItem(_session_key)? true : false
React.useEffect(() => {
if(is_session){
dispatch(userActions.loginCheckFB());
}
},[])
◇ログアウトの実施
// redux/modules/user.js
const logoutFB = () => {
return function (dispatch, getState, {history}) {
auth.signOut().then(() => {
dispatch(logOut());
history.push("/");
});
};
};
Reference
この問題について(反応深化班2週目-2), 我々は、より多くの情報をここで見つけました https://velog.io/@gwichanlee/리액트-심화반-2주차-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol