Firebase React 인증 자습서
25569 단어 react
뭐 공부 해요?
매우 간단한 응용 프로그램.등록, 로그인, 메인 화면 등 3개의 스크린만 있습니다.
Firebase 인증 모듈을 사용하여 로그인/등록을 처리하고 라우터에 응답하여 라우팅을 관리합니다.
마지막까지 읽어 주십시오. 예시 코드를 포함하는 Github repo 링크를 발표할 것입니다.
Firebase 설정
새 Firebase 응용 프로그램 만들기
먼저 firebase console 로 이동하여 새 응용 프로그램을 만듭니다.
인증 방법 추가
인증 을 클릭하고 로그인 방법을 설정합니다.
전자 메일/암호 인증을 사용합니다.
Firebase 자격 증명 가져오기
항목 설정으로 이동하려면 다음과 같이 하십시오.
그리고 Add firebase to your web app을 선택하십시오.자격 증명을 복사하여 프로젝트 루트 디렉토리의
.env 파일에 저장합니다.REACT_APP_FIREBASE_KEY=your_key
REACT_APP_FIREBASE_DOMAIN=your_app_id.firebaseapp.com
REACT_APP_FIREBASE_DATABASE=https://your_app_id.firebaseio.com
REACT_APP_FIREBASE_PROJECT_ID=your_app_id
REACT_APP_FIREBASE_STORAGE_BUCKET=your_storage_bucket
REACT_APP_FIREBASE_SENDER_ID=sender_id
create-react-app 웹 팩config는 REACT_APP로 시작하는 환경 변수를 자동으로 불러오기 때문에 인용할 수 있습니다.자세한 내용은 참조create-react-app documentation
프런트엔드 설정
우리는
create-react-app 을 사용하여 응용 프로그램을 설정할 것이다.나는 당신이 npm의 현대 버전을 가지고 있다고 가정하기 때문에, 나는 npx를 사용하여 스크립트를 실행할 것이다.npx create-react-app firebase-auth-tutorial
또한 React 라우터를 설치하려면 라우팅이 필요합니다.yarn add react-router
src/index.css, src/App.css 및 src/App.test.js 파일을 동시에 삭제합니다.우리는 지금 그것들을 필요로 하지 않는다.Firebase에 애플리케이션 연결
첫 설치
firebase 패키지:yarn add firebase
다음 내용이 포함된 파일src/base.js을 만듭니다.import firebase from "firebase";
const app = firebase.initializeApp({
apiKey: process.env.REACT_APP_FIREBASE_KEY,
authDomain: process.env.REACT_APP_FIREBASE_DOMAIN,
databaseURL: process.env.REACT_APP_FIREBASE_DATABASE,
projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.REACT_APP_FIREBASE_SENDER_ID
});
export default app;
라우팅 추가
켜기
src/App.js:import React from "react";
import { BrowserRouter as Router, Route } from "react-router-dom";
import Home from "./Home";
import Login from "./Login";
import SignUp from "./SignUp";
const App = () => {
return (
<Router>
<div>
<Route exact path="/" component={Home} />
<Route exact path="/login" component={Login} />
<Route exact path="/signup" component={SignUp} />
</div>
</Router>
);
};
export default App;
Home, LogIn 및 SignUp 구성 요소를 만들고 제목만 렌더링합니다.예를 들어, 여기src/Home.js:import React from "react";
const Home = () => {
return <h1>Home</h1>;
};
export default Home;
응용 프로그램을 실행합니다.너는 마땅히 사용할 수 있는 모든 노선이 있어야 한다.등록 및 로그인 구성 요소 만들기
이제 등록 논리를 추가합시다.
src/SignUp 디렉터리를 만들고 우리의 SignUp.js 디렉터리를 그곳으로 이동합니다.이름도 SignUpView.js로 변경합니다.이렇게 보이게 하기:src/SignUp/SignUpView.jsimport React from "react";
const SignUpView = ({ onSubmit }) => {
return (
<div>
<h1>Sign up</h1>
<form onSubmit={onSubmit}>
<label>
Email
<input
name="email"
type="email"
placeholder="Email"
/>
</label>
<label>
Password
<input
name="password"
type="password"
placeholder="Password"
/>
</label>
<button type="submit">Sign Up</button>
</form>
</div>
);
};
export default SignUpView;
이것은 간단한 표현 성분이다.우리는 onSubmit 처리 프로그램을 도구 중의 하나로 삼아 표에 추가할 것이다.email 및 password 필드를 정의하고 Sign Up 단추를 추가했습니다.컨테이너 구성 요소 만들기
src/SignUp/index.js:import React, { Component } from "react";
import { withRouter } from "react-router";
import app from "../base";
import SignUpView from "./SignUpView";
class SignUpContainer extends Component {
handleSignUp = async event => {
event.preventDefault();
const { email, password } = event.target.elements;
try {
const user = await app
.auth()
.createUserWithEmailAndPassword(email.value, password.value);
this.props.history.push("/");
} catch (error) {
alert(error);
}
};
render() {
return <SignUpView onSubmit={this.handleSignUp} />;
}
}
export default withRouter(SignUpContainer);
이 구성 요소는 우리의 등록 논리를 처리할 것이다.함수를 봅시다.그것은 익명 화살표 함수로 정의되었다.내가 여기서 이렇게 하는 것은 사용을 피하기 위해서이다
handleSignUp.이 예에서 저는 클래스
bind(this)가 정말 필요합니다. 왜냐하면 저는 this 패키지를 사용하여props에서 history 대상을 얻었기 때문입니다.그렇지 않으면, 나는 그것을 정규 함수로 정의하는 것이 가장 좋다.따라서 이 함수 I
withRouter에서 페이지를 다시 불러오는 것을 피하기 위해 폼preventDefault에서 password 및 email 함수를 가져와 elements 함수를 사용하여 Firebase에서 새 사용자를 만듭니다.우리의
createUserWithEmailAndPassword 구성 요소는 거의 같다. LogIn 함수 호출을 createUserWithEmailAndPassword 로 바꾸기만 하면 된다.전용 라우팅 추가
좋아, 좋아. 지금 우리는 등록하고 로그인할 수 있지만, 불행하게도, 이것은 큰 의미가 없다. 왜냐하면 홈페이지는 심지어 권한을 부여받지 않은 사용자에게도 사용할 수 있기 때문이다.복구합시다.
작성
signInWithEmailAndPassword 내용은 다음과 같습니다.import React from "react";
import { Route, Redirect } from "react-router-dom";
export default function PrivateRoute({
component: Component,
authenticated,
...rest
}) {
return (
<Route
{...rest}
render={props =>
authenticated === true ? (
<Component {...props} {...rest} />
) : (
<Redirect to="/login" />
)
}
/>
);
}
기본적으로 이 구성 요소는 통과된 src/PrivateRoute.js 또는 Component 블록을 조건부로 렌더링합니다. 이는 통과된 <Redirect/> 속성에 따라 다릅니다.이제
authenticated 에서 사용합시다.App.js 노선을 Home 로 변경합니다.<PrivateRoute exact path="/" component={Home} authenticated={this.state.authenticated}/>
우리는 PrivateRoute 의 authenticated 필드를 사용했지만 존재하지 않습니다.복구합시다.인증 상태 모니터링
먼저
state 를 정상App.js으로 재설정하고 초기 상태를 설정합니다.class App extends Component {
state = { loading: true, authenticated: false, user: null };
render() {
const { authenticated, loading } = this.state;
if (loading) {
return <p>Loading..</p>;
}
return (
<Router>
<div>
<PrivateRoute
exact
path="/"
component={Home}
authenticated={authenticated}
/>
<Route exact path="/login" component={LogIn} />
<Route exact path="/signup" component={SignUp} />
</div>
</Router>
);
}
}
Component에 componentWillMount 를 추가하고 다음을 포함합니다.componentWillMount() {
app.auth().onAuthStateChanged(user => {
if (user) {
this.setState({
authenticated: true,
currentUser: user,
loading: false
});
} else {
this.setState({
authenticated: false,
currentUser: null,
loading: false
});
}
});
}
Firebase에서 데이터를 가져와 상태를 업데이트할 때까지 App.js 렌더링합니다.그리고 우리는 루트를 보여 줍니다. 만약 우리가 등록하지 않았다면, Loading... 페이지로 이동할 것입니다.다음 단계는 무엇입니까?
현재 로그인한 경우 로그인 페이지에서 방향을 바꿀 수 있고 로그아웃 기능도 추가할 수 있습니다 (goreadfirebase documentation
또한 이러한 지식이 있으면 React Ethereum Tutorial에서 지갑 응용 프로그램에 인증을 추가할 수 있습니다!
읊다, 읊조리다
Reference
이 문제에 관하여(Firebase React 인증 자습서), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/satansdeer/firebase-react-authentication-tutorial-dg0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)