보람찬 코기의 개발자 블로그
article thumbnail
반응형

사용자 생성, 로그인 및 소셜 로그인을 처리하는 기능을 구현하기

이번 포스팅은 소셜네트워크 서비스를 개발하면서 기능 구현하고, 발생한 오류 코드에 대해 작성하여 기술하고 해결한 것에 대한 포스팅이다.


 

함수 설명

`Auth` 함수 

`Auth`는 사용자의 이메일과 비밀번호를 사용하여 로그인 및 계정 생성을 관리하는 React 함수로 구현


  • `useState`를 사용하여 상태 변수를 초기화하였고 사용자의 이메일, 비밀번호를 저장한다.
  • `newAccount`: 사용자가 새로운 계정을 생성 중인지 또는 기존 계정으로 로그인 중인지 나타내었다.
  • `onChange` 함수를 통해 email, password 상태를 event를 통하여 얻고,  필드의 입력 값이 변경될 때 호출되는 핸들러 함수로 구현하였다.


`onSubmit`함수

폼 제출 이벤트 처리 함수로 정의하였다. 사용자가 폼을 submit 하면 Firebase를 통해 사용자 계정를 생성하거나 로그인한다.

 

`try`를 통해 오류를 처리하고 발생한 오류 메시지를 `error` 상태에 저장한다.

 

대표적인 오류 예시로는

  • 계정(아이디)이 이미 생성된 경우
  • 계정의 비밀번호가 틀린 경우
  • 비밀번호 형식이 틀린 경우

`toggleAccount` 함수

"Create Account" 및 "Sign In" 버튼을 변경하는 함수로, `newAccount` 상태를 변경하여 현재 계정 생성 중인지 또는 로그인 중인지 에 따라 변경한다.


 

`onSocialClick` 함수

소셜 로그인 버튼(구글, 깃허브)을 클릭했을 때 호출된다. `name` 속성을 기반으로 선택한 소셜 로그인 플랫폼를 설정하고 Firebase를 사용하여 해당 소셜 로그인 혹은 계정을 생성한다.


결론

사용자에게 이메일 및 비밀번호를 입력할 수 있는 폼을 표시한다.

 

"If you have an account? Sign In" 문구를 통해 클릭을 통해 "Create Account" 또는 "Sign In" 버튼을 스왑하여 계정 생성및 로그인 을 알맞게 선택한다.

 

그리고 Firebase에 접근하여 계정을 확인하여 로그인을 진행하고 로그인 오류 발생시 메시지도 출력한다.

 

구글 또는 깃허브 소셜 로그인 버튼을 표시하여 두가지 플랫폼으로 가입 혹은 로그인을 진행한다.


발생한 오류 

 

 

//Auth.js 사용자 계정 인증을 위한 code

import { authService, firebaseInstance } from "fbase";
import React, { useState } from "react";

const Auth =() => {
        const [email, setEmail] = useState("");
        const [password, setPassword] = useState("");
        const [newAccount, setNewAccount] =useState(true);
        const [error, setError]=useState("");
        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();
            try {
                let data;
                if(newAccount){
                    data = await authService.createUserWithEmailAndPassword(email,password);
                 } else{
                    data = await authService.signInWithEmailAndPassword(email,password);
                 }
                 console.log(data);
            } catch (error) {
                setError(error.message);
                
            }
         
        };
        const toggleAccount = () => setNewAccount((prev)=> !prev);
        const onSocialClick = async(event) => { 
            const{
                target:{name},
            } = event;
            let provider;
            if(name==="google"){
                provider = new firebaseInstance.auth.GoogleAuthProvider();
            }else if(name==="github"){
                provider = new firebaseInstance.auth.GithubAuthProvider();
            }
            const data = await authService.signInWithPopup(provider);
            console.log(data);
        };
    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" : "Sign In"} />{error}
            </form>
            <span onClick={toggleAccount}>{newAccount ? "If you have a account? Sign In":"Create Account"}</span>
            <div>
                <button onClick={onSocialClick} name="google">Continue with Google</button>
                <button onClick={onSocialClick} name="github">Continue with Github</button>
            </div>
        </div>
    );
};
export default Auth;

 

반응형
profile

보람찬 코기의 개발자 블로그

@BoChan

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!