Firebase를 사용하여 Node JS에서 인증 처리 방법🔥
40552 단어 reactnodefirebasejavascript
그리고 우리는 JWT에서 암호를 산열하고 JWT의 키를 정의하는 것을 고려한다. 작은 서비스나 API를 구축해야 할 때 이것은 좀 지루하다.
본고에서 우리는 구글 로그인을 어떻게 사용하는지 보여줄 것이다. 그러나 이것은 Firebase에서 사용할 수 있는 다른 로그인 공급업체에도 적용된다.설정 방법에 대한 자세한 내용은 Firebasedocs의 링크를 참조하십시오.
화기
Firebase는 구글의 모바일 응용 프로그램 개발 플랫폼으로 당신의 응용 프로그램을 구축하고 개선하며 발전시키는 데 도움을 줍니다.Firebase 내부에 우리는 신분 검증, 알림 전송, 실시간 데이터베이스 등 모듈이 있고 더 멋진 것이 있다.
우리 어떡하지?
Firebase를 통해 요청된 NodeJS 백엔드를 확인합니다.
우선, 우리는 Firebase 에서 프로젝트를 만들어야 한다.
Firebase 설정
초기 화면은 Firebase에서 새 프로젝트를 만듭니다. 클릭
Create Project
현재 응용 프로그램의 이름을 지정하는 화면이 있습니다. 예를 들어 내 프로젝트 이름은
firebase-auth-server
현재 Firebase에서 프로젝트를 만들고 있습니다.
생성되면 Firebase 콘솔에서 여러 서비스를 포함하는 대시보드를 제공할 것입니다.
Authentication
메뉴를 선택하십시오.그리고 Firebase가 제공하는 공급업체 목록이 있습니다. 하지만 우선 인증 근거
Google
를 선택해야 합니다.너무 좋아요.Firebase는 현재 구글의 우리 전단에 대한 인증을 받을 수 있다.
백엔드 설정
현재 프로젝트를 시작하고 express를 설치해야 합니다.
mkdir server
npm init -y
npm install express cors
npm install -D nodemon
그 다음에 프로젝트의 루트에 index.js
라는 파일을 만들고 다음 코드를 만들어야 합니다.const express = require("express");
const app = express();
app.use("/", (req, res) => {
res.send("Hello World");
});
app.listen(4000, () => console.log("The server is running at PORT 4000"));
위의 코드는 기본적인 express 서버를 만들 것입니다. 이것은 우리의 시작입니다.그 다음에 우리는 다음 코드에 따라 기본 단점을 만들어야 한다.
/**
* index.js
*/
const express = require("express");
const cors = require("cors");
const authMiddleware = require("./auth-middleware");
const app = express();
app.use(cors());
const books = [
{
id: 1,
name: "Harry Potter",
image:
"https://pmpub-catalogue.s3-eu-west-1.amazonaws.com/covers/web/9781781100240.jpg",
},
{
id: 2,
name: "Clean Code",
image:
"https://images-na.ssl-images-amazon.com/images/I/41jEbK-jG+L._SX374_BO1,204,203,200_.jpg",
},
{
id: 3,
name: "Javascript: The good parts",
image: "https://images-na.ssl-images-amazon.com/images/I/81kqrwS1nNL.jpg",
},
];
app.use("/", authMiddleware);
app.get("/books", (request, response) => {
return response.send({ books });
});
app.listen(4000, () => console.log("The server is running at PORT 4000"));
현재, 우리는 package.json
파일을 되돌려주고, start
스크립트를 추가하고, 코드를 테스트해야 합니다.{
"name": "firebase-auth-server",
"version": "1.0.0",
"main": "index.js",
"author": "Nikollas Betiol",
"license": "MIT",
"scripts": {
"start:dev": "nodemon index.js"
},
"dependencies": {
"express": "^4.17.1"
},
"devDependencies": {
"nodemon": "^2.0.3"
}
}
그 다음에 우리의 package.json
파일은 위의 코드와 유사해야 한다.그리고 우리는 응용 프로그램을 실행하기 위해
script
을 실행할 수 있다.npm run start:dev
네비게이션 http://localhost:4000/books
지금 너는 반드시 이것이 있어야 한다.좋습니다. 저희 API에 단점이 하나 있습니다. 책 목록을 되돌려줍니다. 하지만 모든 사람이 저희 단점에 접근할 수 있다는 것을 알 수 있습니다. 저희는 그러기를 원하지 않습니다.🤔
이 문제를 복구하려면 firebase-admin 를 사용하십시오. 이것은 Firebase와 통합된 라이브러리입니다.
여기에서 우리는 설치해야 한다
firebase-admin
npm install firebase-admin
Firebase 컨트롤러로 돌아가서 인증서를 다운로드합시다.이 단계를 수행하려면 here 을 클릭합니다.firebase
폴더에 파일을 만들고 저장합니다.코드는 아래와 같습니다.
/*
firebase/index.js
*/
const firebase = require("firebase-admin");
const credentials = require("./credentials.json");
firebase.initializeApp({
credential: firebase.credential.cert(credentials),
databaseURL: "https://<yourproject>.firebaseio.com",
});
module.exports = firebase;
현재 요청을 필터하고 권한을 부여하거나 거부할 수 있는 auth 중간부품을 만들어야 합니다.그리고
auth-middleware.js
라는 파일을 만들어야 합니다touch auth-middleware.js
다음 코드 사용하기
/*
auth-middleware.js
*/
const firebase = require("./firebase/admin");
function authMiddleware(request, response, next) {
const headerToken = request.headers.authorization;
if (!headerToken) {
return response.send({ message: "No token provided" }).status(401);
}
if (headerToken && headerToken.split(" ")[0] !== "Bearer") {
response.send({ message: "Invalid token" }).status(401);
}
const token = headerToken.split(" ")[1];
firebase
.auth()
.verifyIdToken(token)
.then(() => next())
.catch(() => response.send({ message: "Could not authorize" }).status(403));
}
module.exports = authMiddleware;
그러면 index.js
파일로 돌아가서 auth-middleware
중간부품을 추가할 수 있습니다./**
* index.js
*/
const express = require("express");
const authMiddleware = require("./auth-middleware");
const app = express();
const books = [
{ id: 1, name: "Harry Potter" },
{ id: 2, name: "Clean Code" },
{ id: 3, name: "Javascript: Good practices" },
];
app.use("/", authMiddleware);
app.get("/books", (request, response) => {
return response.send({ books });
});
app.listen(4000, () => console.log("The server is running at PORT 4000"));
쿨, 나는 백엔드가 이미 백엔드에서 요청을 받을 준비가 되어 있다고 생각한다!프런트 엔드
프로젝트 만들기
create-react-app
를 시작합시다CSShere를 찾을 수 있습니다.
npm install -g create-react-app
create-react-app frontend
cd frontend/
npm install firebase react-router-dom react-router
현재 우리는 두 개의 파일을 만들어야 한다.touch Login.js
touch BookList.js
파일Login.js
에 다음 코드를 붙여넣습니다./**
* src/Login.js
*/
import React from "react";
export default function Login() {
return <h1>Login</h1>;
}
파일BookList.js
에서 코드 붙여넣기:/**
* src/BookList.js
*/
import React from "react";
export default function BookList() {
return <h1>BookList</h1>;
}
응용 프로그램에서 두 개의 중요한 파일을 만들었습니다. App.js
를 사용react-router으로 설정합니다.NOTE: THIS IS NOT THE BEST WAY TO CREATE AN AUTHORIZATION FLOW, THIS PROJECT IS JUST AN EXAMPLE
/**
* src/App.js
*/
import React from "react";
import "./App.css";
import { BrowserRouter, Switch, Route } from "react-router-dom";
import Login from "./Login";
import BookList from "./BookList";
export default function App() {
return (
<div className="App">
<BrowserRouter>
<Switch>
<Route path={"/login"}>
<Login />
</Route>
<Route path={"/book-list"}>
<BookList />
</Route>
</Switch>
</BrowserRouter>
</div>
);
}
이제 이 문서Setup Web Project Configuration에 따라 구성을 가져올 수 있습니다.firebase.js
폴더에 src
라는 파일을 만들고 다음 코드를 붙여넣습니다. 이 코드로 Firebase 설정을 만듭니다./**
* src/firebase.js
*/
import firebase from "firebase/app";
import "firebase/auth";
const firebaseConfig = {
apiKey: "your apiKey here",
authDomain: "your authDomain here",
databaseURL: "your databaseURL here",
projectId: "your projectId here",
storageBucket: "your storageBucket here",
messagingSenderId: "your messagingSenderId here",
appId: "your appId here",
};
firebase.initializeApp(firebaseConfig);
const auth = firebase.auth();
export { auth, firebase };
이제 파일Login.js
으로 돌아가서 코드를 붙여넣습니다.코드는 다음과 같습니다.
/**
* src/Login.js
*/
import React from "react";
import { useHistory } from "react-router-dom";
import { auth, firebase } from "./firebase";
export default function Login() {
const history = useHistory();
async function googleLogin() {
//1 - init Google Auth Provider
const provider = new firebase.auth.GoogleAuthProvider();
//2 - create the popup signIn
await auth.signInWithPopup(provider).then(
async (result) => {
//3 - pick the result and store the token
const token = await auth?.currentUser?.getIdToken(true);
//4 - check if have token in the current user
if (token) {
//5 - put the token at localStorage (We'll use this to make requests)
localStorage.setItem("@token", token);
//6 - navigate user to the book list
history.push("/book-list");
}
},
function (error) {
console.log(error);
}
);
}
return (
<div>
<button onClick={googleLogin} className="login-button">
GOOGLE
</button>
</div>
);
}
그리고 터미널로 돌아가서 응용 프로그램을 실행합니다.npm start
시작하면 React에서 브라우저 창이 열립니다.탐색
http://localhost:3000/login
당신은 GOOGLE
단추를 클릭할 수 있습니다쿨, 로그인하면 책갈피로 방향을 바꿔야 해.
BookList.js
구성 요소를 되돌려주고 아래 코드를 붙여넣기/**
* src/BookList.js
*/
import React, { useEffect, useState } from "react";
export default function BookList() {
//create state to store our book list
const [books, setBooks] = useState([]);
useEffect(() => {
async function loadBooks() {
//fetch the book list
const request = await fetch("http://localhost:4000/books", {
//use the authorization
headers: {
Authorization: "Bearer " + localStorage.getItem("@token"),
},
});
const allBooks = await request.json();
//set the book list on state
setBooks(allBooks.books);
}
//invoke the function
loadBooks();
}, []);
return (
<div className="container">
<h1>BookList</h1>
{/* map the book list to show book name and image */}
{books.map((book) => (
<div key={book.id} className="booklist">
<img className="image" alt={book} src={book.image} />
<h3>{book.name}</h3>
</div>
))}
</div>
);
}
아니오, 우리는 책 목록을 볼 수 있습니다/결론
서버에서 Firebase auth를 사용하기 시작할 수 있습니다.더 많은 탐색Firebase Docs의 가능성을 볼 수 있습니다.
Firebase auth와의 통합을 만드는 방법을 배우는 데 도움이 되기를 바랍니다. 원본 코드를 보려면 제 Github 를 보십시오.
고마워요/
Reference
이 문제에 관하여(Firebase를 사용하여 Node JS에서 인증 처리 방법🔥), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/betiol/how-to-handle-authentication-on-node-js-using-firebase-5ajn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)