我如何将我json数据保存到一个firebase当前UID中?

hgc7kmma  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(132)

我试图让每个用户都有自己的数据,但我有我的用户保存在firebase和我的数据保存在JSON服务器,有没有办法连接他们?使每次用户注册和登录有自己的数据与其他用户分开。我希望你明白我想做的:)
下面是我在jsonserver.service.ts上存储数据的服务:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class ApiService {

  constructor(private http : HttpClient,) { }
// order Table
 postOrder(data : any){
  return this.http.post<any>("http://localhost:3000/OrderList/",data);
 }
 getOrder(){
  return this.http.get<any>("http://localhost:3000/OrderList/");
 }
// order detials

 postOrderDetials(data : any){
  return this.http.post<any>("http://localhost:3000/OrderDetials/",data);
 }
 getOrderDetials(){
  return this.http.get<any>("http://localhost:3000/OrderDetials/");
 }
// item table

 postItemTable(data : any){
  return this.http.post<any>("http://localhost:3000/itemTable/",data);
 }

 getItemTable(){
  return this.http.get<any>("http://localhost:3000/itemTable/");
 }
// delete a row in the order table
 DeleteOrder(id : number){
  return this.http.delete<any>("http://localhost:3000/OrderList/"+id)
 }
// to edit the item table 
 PutItem(data : any , id : number){
  return this.http.put<any>("http://localhost:3000/itemTable/"+id,data);
 }
//  to add to the operation table
postOperation(data : any){
  return this.http.post<any>("http://localhost:3000/OperationTable/",data);
}
getOperation(){
  return this.http.get<any>("http://localhost:3000/OperationTable/");
}
}

下面是我的service.ts,用于将用户保存到firebase中:

interface authResponeData {
  kind: string;
  idToken: string;
  email : string;
  refreshToken : string;
  expiresIn: string;
  localId:string;
}

@Injectable({
  providedIn: 'root'
})
export class AuthService {
  userData: any;

  constructor(
    private fireAuth : AngularFireAuth, private router : Router,
    public angularFireAuth: AngularFireAuth,
    private api : ApiService) {}

    login(email : string , password : string) {
      this.fireAuth.signInWithEmailAndPassword(email,password).then( ()=> {
        localStorage.setItem('AIzaSyC6Y3IuqNUMfEe-xQFpmviAD2dWeBCuztI' , 'true');
        this.router.navigate(['Order-table']);
        this.angularFireAuth.currentUser.then( data  => {
          console.log(data?.uid);
      })
      },err => {
        alert(err.message);
        this.router.navigate(['/login']);
      })
    }

  register(email : string , password : string){
    this.fireAuth.createUserWithEmailAndPassword(email , password).then( () => { 
      alert("registration successful")
      this.router.navigate(['/login']);
    }, err => {
      alert(err.message);
      this.router.navigate(['/register']);
    })
  }

  SignOff() {
    this.fireAuth.signOut().then( () => {
      localStorage.removeItem('AIzaSyC6Y3IuqNUMfEe-xQFpmviAD2dWeBCuztI');
      this.router.navigate(['/login']);
    }, err => {
      alert(err.message); 
    })
  }

我希望,我把所有需要的信息,如果任何信息需要只是让我知道

rbpvctlc

rbpvctlc1#

以下是您可以采用的几种方法:
1.一种选择是在JSON服务器上的数据对象中包含一个字段,用于存储用户的Firebase ID。当用户登录时,您可以检索其Firebase ID,并使用它来过滤从JSON服务器检索的数据,仅返回属于该用户的数据。
1.或者,您可以将对JSON服务器上用户数据的引用存储在Firebase用户文档的字段中。例如,您可以将JSON服务器上用户数据的URL存储在用户文档的字段中。当用户登录时,您可以检索此URL并使用它访问JSON服务器上的用户数据。

km0tfn4u

km0tfn4u2#

要实现第一个解决方案,可以执行以下步骤:
在Angular应用程序中,使用Firebase身份验证API对用户进行身份验证并检索其Firebase ID。
向JSON服务器发出请求时,将Firebase ID作为查询参数包含在请求中或包含在请求正文中。
在JSON服务器上,使用Firebase ID过滤返回给客户端的数据,例如,可以使用ID从数据库中只检索属于具有该ID的用户的数据。
在Angular应用程序中,使用过滤后的数据填充UI。
下面是一些示例代码来说明这种方法:

// Authenticate the user and retrieve their Firebase ID
firebase.auth().onAuthStateChanged((user) => {
  if (user) {
    const firebaseId = user.uid;

    // Make a request to the JSON server, including the Firebase ID in the request
    http.get(`/api/data?firebaseId=${firebaseId}`).subscribe((data) => {
      // Use the filtered data to populate the UI
      this.data = data;
    });
  }
});

// On the JSON server

app.get('/api/data', (req, res) => {
  const firebaseId = req.query.firebaseId;

  // Use the Firebase ID to filter the data that is returned to the client
  db.collection('data').find({ firebaseId }).toArray((err, docs) => {
    if (err) {
      res.send(err);
    } else {
      res.send(docs);
    }
  });
});

这种方法允许您轻松地只检索属于经过身份验证的用户的数据,而不必担心实现服务器端身份验证或管理用户会话

相关问题