프로그램 관리자가 Firebase를 사용하여 사용자와 권한을 관리하는 간단한 제어판

프로그램 관리자가 Firebase를 사용하여 사용자와 권한을 관리하는 간단한 제어판



Firebase admin SDK는 관리자 권한으로 Firebase 프로젝트와 상호작용을 할 수 있는 서버 측 SDK입니다. Firebase 컨트롤러를 사용하지 않고 프로젝트를 감시하고 관리할 수 있는 일부 작업을 수행할 수 있습니다.
Firebase admin SDK에서 제공하는 작업을 수행하기 위해 웹 응용 프로그램을 만들 것입니다.
이를 위해서는 컨트롤 패널의 전단 프로그램과 관리자 SDK를 통합한 후단 프로그램이 필요합니다.
우리는 다른 부분에서 앞부분을 소개할 것이다.

This project is made using Ubuntu 20.04 OS.


예비 지식


Firebase 프로젝트를 만들고 인증 사용하기 — 실시간 데이터베이스와 비밀번호 검증.
액세스console.firebase.com 항목을 만들고 위에서 설명한 대로 구성합니다.

제1부 — 제조 백엔드


프런트엔드 응용 프로그램에서 사용할 rest API를 만들기 위해 node js를 백엔드로 사용합니다.Javascript 코드를 더 잘 작성하고 오류가 없는 방법을 제공하기 때문에 Typescript를 사용할 것입니다.
첫 번째 단계에서는 Typescript를 사용할 노드 항목을 설정합니다.rest API를 만들려면 express를 사용하십시오.
새 폴더를 만들고 터미널을 열면 명령을 실행해서 프로젝트를 만듭니다.
npm init -y
자, 이제 소포가 하나 있습니다.json 파일.프로젝트 설치에 필요한 의존항을 설정합니다.
npm install express cors dotenv firebase-admin
그리고 typescript,tslint,cors,express의 유형 성명을 개발 의존항으로 합니다.
npm install typescript tslint @types/express @types/cors
이제 가방을 좀 변경합시다.json은 우리의 구축 과정에서 typescript를 진정으로 통합시켰다.scripts 대상에 "start"키를 추가할 것입니다. 아래와 같습니다.
시작: tsc & node dist/index.js
이것만 있으면, 우리는 Typescript 컴파일러 (또는 tsc) 를 실행해서 모든 데이터를 전송할 수 있다.프로그램을 실행하기 전에 모든 파일을 삭제합니다.우리는 수정할 것이다.tsconfig 파일, 본문 뒤에 dist 디렉터리를 typescript 컴파일러의 출력 디렉터리로 언급합니다.
이 파일이 우리 프로그램의 입구점이 될 것이기 때문에'dist/index.js'를 주 속성의 값으로 언급합시다.
이러한 변화가 생겼다, 소프트웨어 패키지.json 파일은 이와 유사해야 합니다.

지금 tsconfig를 추가합니다.json 파일을 만들고 다음 값을 사용하여 프로젝트 루트 디렉터리에 저장합니다.이 파일은 항목별 typescript 구성 파일입니다.여기에서 우리는'outDir'를'dist'이라고 부른다. 이것은 tsc가 dist 디렉터리를 전송 파일의 출력 디렉터리로 사용하도록 확보한다





이제 프로젝트에 Typescript linting을 설정하고 프로젝트 루트 디렉터리에서 실행되는 터미널에서 다음 명령을 실행하여 tslint을 생성합니다.json



./node_modules/.bin/tslint --init

생성된 tslint을 엽니다.json 파일과 상응하는 컨트롤러가 없는 규칙





이제 프로젝트에 Firebase admin sdk를 설정합니다.Firebase admin sdk를 초기화하기 위해 서비스 계정을 설정해야 합니다


Follow this guide 서비스 계정을 설정하려면 키를 다운로드하고 서비스 키로 이름을 바꾸십시오.json.이 파일을 프로젝트 디렉터리의 루트 디렉터리에 놓으십시오


이 파일을 노출 위험이 있는 원격 위치로 전송해서는 안 됩니다.이 파일을 에 추가해야 합니다.git에서git의 파일을 무시합니다


이 프로젝트에서, 우리는dotenv를 사용하여 여러 환경에서 환경 변수를 설정하고 사용하는 작업을 간소화합니다.그래서 우리는 하나를 만들 것이다.프로젝트 루트 디렉터리에 있는 env 파일에서 환경 변수로 필요한 몇 개의 값을 정의할 수 있습니다


을(를) 만듭니다.env 파일 및 다음 값 붙여넣기:



GOOGLE_APPLICATION_CREDENTIALS=service-key.json

DB_URL=<Your DB URL>

Firebase 콘솔의 실시간 데이터베이스 상단에서 데이터베이스 URL 찾기


이제 디렉터리 구조를 만들 것입니다. 그림과 같습니다:


src

 — models

—modules

 — — admin

 — — auth

 — — users


에서 인덱스를 만듭니다.tssrc 디렉토리의 파일


인덱스에 있습니다.ts 파일, 필요한 모듈을 가져오십시오



import express from 'express';
import * as admin from 'firebase-admin';
import * as dotenv from 'dotenv';
import cors from 'cors';

에서 언급한 값을 주입하기 위해adminsdk를 초기화하기 전에dotenv를 설정해야 합니다.환경 변수로 env 파일



const dotenvKey = dotenv.config();

여기서 상수 부여 값을 삭제할 수 있습니다. 프로젝트에dotenvKey 상수를 사용하지 않기 때문입니다


현재 Firebase admin sdk를 초기화합니다



admin.initializeApp({    
    credential: admin.credential.applicationDefault(),    
    databaseURL: process.env.DB_URL
});

여기서 Firebase admin은 에서 비치는 환경 변수를 사용합니다.env 파일에서 서비스 키에 접근합니다.json 파일.또한 저희 응용 프로그램이 실시간 데이터베이스에 접근하기 때문에 데이터베이스 URL도 제공했습니다


이제 샘플 코드를 추가하여express 프로그램을 만듭니다



**const** port = process.env.PORT || 8080;
**const** app = _express_(); 
app._use_(cors({origin: true}));
app._use_(express._json_());
app._use_(express._urlencoded_({extended: false}));

브라우저에서 단점을 사용할 때cors 오류가 발생하지 않도록 cors을 사용합니다


Typescript의 장점 중 하나는 인터페이스를 사용할 수 있다는 것이다. 이 예에서 우리는 인터페이스를 사용하여 사용자 모델에 모델을 정의할 수 있다.따라서 모델 디렉토리에서 UserModel이라는 파일을 만듭니다.ts, 내용은 다음과 같다:



export interface User {
    uid: string,
    email: string | undefined,
    displayName: string | undefined,
    lastSignInTime: string,
    creationTime: string,
    emailVerified: boolean,
    admin: boolean
}

루트를 계속 만들기 전에 권한을 부여받지 않은 접근을 방지하기 위해 노드를 보호해야 합니다.이를 위해, 우리는 두 개의 중간부품을 만들고 사용할 것입니다. 하나는 신분 검증에 사용되고, 다른 하나는 권한을 부여하는 데 사용됩니다. 즉, 동작을 요청한 사용자가 충분한 권한을 가지고 있는지 확인하는 것입니다.p>

에서 두 개의 파일을 만들고 에서 인증을 진행합니다.중간부품.ts, 권한 수여.중간부품.ts





authenticate를 사용하여 사용자가 유효한 idToken을 가지고 있는지 확인하고 authorize를 사용하여 사용자가 필요한 권한을 가지고 있는지 확인합니다


Note: The authenticate filter requires an Authorization header with the value in the following form:- Bearer

Note: The idToken can be retrieved by signing-in to firebase using the REST API for firebase Authentication for the moment.


다음에 UsersController를 만들어야 합니다.ts 모듈의 파일→사용자에는 "/users"경로에서 사용할 방법이 포함됩니다





여기서 "//RA"는 특정 함수의 기능을 수행하려면 관리자 권한이 필요하다는 것을 나타냅니다


이 예에서 방법의 이 명칭은 그 기능을 정의한다


getAllUsers() →Returns a list of all the users.

getUser() →Accepts an uid and returns the particular user.

updateUser() →Here we can perform many task, but in the current scope we will only set the displayName property of the user. You can play around with the function and find out all the fields that a user can have in firebase authentication.

createUser() →Creates an user.

createAdminUser() →Creates an user but with Admin privileges.

deleteUser() →Deletes the user whose uid is provided.

deleteUsers() →Deletes multiple users, uid array is fetched from body.

forceSignOut() →Forcibly revoke a users refresh token, so that their login can’t continue.

mapUserFromUserRecord() →An utility function, private to the file, which helps in extracting user from an UserRecord object returned by the admin sdk, returns a User _ object._


여기서 우리는customClaims를 사용하여 사용자의 관리자 역할을 저장합니다.이러한 사용자 지정 선언은 admin SDK를 통해서만 검색할 수 있습니다(클라이언트 sdk에서 검색할 방법을 찾지 못했습니다. 만약 제가 틀렸다면 피드백에서 언급하십시오.)


우리는 서로 다른 경로를 기능에 비추는 공유기가 필요합니다.이를 위해, 우리는 파일 경로를 만들었다.같은 디렉터리에 있습니다.이 파일에는 다음과 같은 내용이 포함되어 있습니다





여기에서, 우리의express 프로그램을 받아들이고 루트를 추가하는configure 루트 함수를 정의했습니다.루트가 관리자 권한을 필요로 할 때, 우리는true를 전달하여 권한을 부여합니다


와 유사하게 우리는 두 개의 파일adminController를 만들었다.교통수단과 노선. 모듈에서의ts→관리자





마지막으로, 다음 가져오기 문장을 인덱스에 추가합니다.ts 파일



import { configureRoutes as configureRoutesForUsers } from './modules/users/routes';
import { configureRoutes as configureRoutesForAdmin } from './modules/admin/routes';

우리는 다음 코드를 사용하여 서버를 시작해서 단점을 감청합니다.



app.listen( port, () => {
    console.log('Server listening at port '+ port);
});

마지막으로
를 사용하여 로컬 호스트에서 서버를 시작합니다



npm start

우리는 Postman 테스트 단점을 사용할 수 있습니다Ex:http://localhost:8080/users/


Firebase 컨트롤러나 REST API for firebase를 사용하여 프로젝트에 사용자를 추가할 수 있습니다.그리고 Firebase 컨트롤러에서 uid를 검색할 수 있습니다


Note: For the first time, to add an admin, we can normally add an user and call the /admin/:uid/make endpoint by passing false to its authorize filter. After that we can revert the value to true.


전체 프로젝트 파일은 다음 Github 저장소를 참조하십시오


i-am-jyotirmaya/Firebase-admin-demo-api


Thank You

좋은 웹페이지 즐겨찾기