Javascript Firebase使用凭据问题重新验证和检索数据

Javascript Firebase使用凭据问题重新验证和检索数据,javascript,firebase,firebase-authentication,Javascript,Firebase,Firebase Authentication,方法使用凭证重新验证和检索数据需要凭证 我尝试了这个,但它给了我一个错误: const user = firebase.auth().currentUser; const credential = firebase.auth.OAuthCredential; await user.reauthenticateAndRetrieveDataWithCredential(credential); await user.updateEmail(email); return email; 错误消息 重

方法
使用凭证重新验证和检索数据
需要
凭证

我尝试了这个,但它给了我一个错误:

const user = firebase.auth().currentUser;
const credential = firebase.auth.OAuthCredential;
await user.reauthenticateAndRetrieveDataWithCredential(credential);
await user.updateEmail(email);
return email;
错误消息

重新验证AndRetrieveDataWithCredential失败:第一个参数“credential”必须是有效的凭据

我只有宣誓认证(没有电子邮件+密码)。所以我不知道firebase需要什么
credential
。有什么帮助吗

编辑:
出于某种原因,my
firebase.auth.OAuthCredential
或(
firebase.auth.AuthCredential
)返回未定义。用户已签名/授权。

您需要使用订阅来监视更改。使用AngularFire监视他们何时登录并获取UID(假设您在Firebase中使用身份验证登录,以便使用UID作为树路径保存所有数据)

您还可以添加一个设置超时,以便在给定时间后取消订阅

   import { AngularFirestore } from 'angularfire2/firestore';
    import { AngularFireDatabase, AngularFireList } from 'angularfire2/database';
    import { AngularFireAuth } from 'angularfire2/auth';
    import { switchMap, map } from 'rxjs/operators';
    import { Observable,  pipe } from 'rxjs';
    import { Observable, Subscription } from 'rxjs';
    import firebase as firebase from 'firebase/app';

private myOAuthSubscription: Subscription;
private myDatasubscription: Subscription;    
public userloggedin:boolean = false;
public uid:string = '';
private functionhasrun:boolean = false;

    public this.items:any = [];

    constructor(
      public _DB: AngularFireDatabase,
      public _afAuth: AngularFireAuth,
    ) {

    //check that the user is logged in 
    try {
      this.myOAuthSubscription = this._afAuth.authState.subscribe(user => {

        if (user && user.uid) {

          console.log('loggedin = true');
          this.userloggedin = true;
          this.uid = String(user.uid);

          if(this.functionhasrun==false){

           this.functionhasrun = true;
           this.funDoDB():

          }

        } else {

        console.log('loggedin = false');
        this.userloggedin = true;
        this.uid = '';

        }
      });
    } catch (e) {
      console.error("fbData_subscription", e);
    }



    }

    ngOnDestroy() {
      this.myOAuthSubscription.unsubscribe();
      this.myDatasubscription.unsubscribe();
    }


    private funDoDB(){
          if(this.userloggedin == true){
          try {

        //subscription using AngulaFire
        this.myDatasubscription = this._DB.list('myDataPath/' + this.uid).snapshotChanges().pipe(map(actions => {
            return actions.map(action => ({ key: action.key, val: action.payload.val() }));
          }))
          .subscribe(items => {

            this.items = [];
            this.items = items.map(item => item);

            console.log("db results",this.items);

            var icount=0;

            for (let i in this.items) {

             console.log("key",this.items[i].key);
             console.log("val",this.items[i].val); 
             console.log("----------------------------------);

             //checking if something exists
             if (this.items[i].key == 'SomeNodePath') {
               var log = this.items[i].val;
             }

            }


          } catch (e) {
            console.error(e);
          }


          });
        }
        }

    npm install --save angularfire2 firebase
    npm install -D rxjs@6.2.2 rxjs-compat@6.2.2

您需要使用订阅来监视更改。使用AngularFire监视更改何时登录并获取UID(假设您在Firebase中使用身份验证登录,以便使用UID作为树路径保存所有数据)

您还可以添加一个设置超时,以便在给定时间后取消订阅

   import { AngularFirestore } from 'angularfire2/firestore';
    import { AngularFireDatabase, AngularFireList } from 'angularfire2/database';
    import { AngularFireAuth } from 'angularfire2/auth';
    import { switchMap, map } from 'rxjs/operators';
    import { Observable,  pipe } from 'rxjs';
    import { Observable, Subscription } from 'rxjs';
    import firebase as firebase from 'firebase/app';

private myOAuthSubscription: Subscription;
private myDatasubscription: Subscription;    
public userloggedin:boolean = false;
public uid:string = '';
private functionhasrun:boolean = false;

    public this.items:any = [];

    constructor(
      public _DB: AngularFireDatabase,
      public _afAuth: AngularFireAuth,
    ) {

    //check that the user is logged in 
    try {
      this.myOAuthSubscription = this._afAuth.authState.subscribe(user => {

        if (user && user.uid) {

          console.log('loggedin = true');
          this.userloggedin = true;
          this.uid = String(user.uid);

          if(this.functionhasrun==false){

           this.functionhasrun = true;
           this.funDoDB():

          }

        } else {

        console.log('loggedin = false');
        this.userloggedin = true;
        this.uid = '';

        }
      });
    } catch (e) {
      console.error("fbData_subscription", e);
    }



    }

    ngOnDestroy() {
      this.myOAuthSubscription.unsubscribe();
      this.myDatasubscription.unsubscribe();
    }


    private funDoDB(){
          if(this.userloggedin == true){
          try {

        //subscription using AngulaFire
        this.myDatasubscription = this._DB.list('myDataPath/' + this.uid).snapshotChanges().pipe(map(actions => {
            return actions.map(action => ({ key: action.key, val: action.payload.val() }));
          }))
          .subscribe(items => {

            this.items = [];
            this.items = items.map(item => item);

            console.log("db results",this.items);

            var icount=0;

            for (let i in this.items) {

             console.log("key",this.items[i].key);
             console.log("val",this.items[i].val); 
             console.log("----------------------------------);

             //checking if something exists
             if (this.items[i].key == 'SomeNodePath') {
               var log = this.items[i].val;
             }

            }


          } catch (e) {
            console.error(e);
          }


          });
        }
        }

    npm install --save angularfire2 firebase
    npm install -D rxjs@6.2.2 rxjs-compat@6.2.2
显示了此示例:

您的代码无法正确实现注释。您需要向用户显示提示以再次提供其凭据,将其放入正确的凭据对象类型中,然后将其传入

例如:

显示了此示例:

您的代码无法正确实现注释。您需要向用户显示提示以再次提供其凭据,将其放入正确的凭据对象类型中,然后将其传入

例如:


在一个Vue.js项目中遇到了这个问题,我们有一个
firebase.js
文件来处理
const
的模块导入和导出

希望这能帮助某人在使用类似设置时节省时间

文件:
firebase.js

import firebase from 'firebase/app'
import 'firebase/auth'
import 'firebase/database'


// Initialize Firebase
const app = firebase.initializeApp(options)
export const fb = firebase
export const auth = app.auth()
export const db = app.database()
export const functions = app.functions()
其他脚本文件中或
*.vue中的
changePassword()
示例

import { fb, auth } from './firebase.js'
...
changePassword() {
  if (yourFormValidation == true) {
    let user = auth.currentUser

    const credentials = fb.auth.EmailAuthProvider.credential(
      user.email,
      this.current_password
    )
    user.reauthenticateAndRetrieveDataWithCredential(credentials)
      .then(() => {
        user.updatePassword(this.new_password)
          .then(() => {
            console.log('your password was successfully changed.')
          })
          .catch(error => console.log(error))
      })
      .catch(error => console.log(error.message))
  }
}
我遇到的
无法读取未定义“
的属性“credential”…

仅从./firebase.js导入
{auth},然后调用
auth.EmailAuthProvider()

如何访问…上的其他类

  • firebase.js中的导出常量fb=firebase

  • import firebase from 'firebase/app'
    import 'firebase/auth'
    import 'firebase/database'
    
    
    // Initialize Firebase
    const app = firebase.initializeApp(options)
    export const fb = firebase
    export const auth = app.auth()
    export const db = app.database()
    export const functions = app.functions()
    
  • 从“/firebase.js”导入{fb,auth}
    编写函数的地方

  • 调用
    fb.auth.EmailAuthProvider.credential()
    或其他需要的类


  • 在一个Vue.js项目中遇到了这个问题,我们有一个
    firebase.js
    文件来处理
    const
    的模块导入和导出

    希望这能帮助某人在使用类似设置时节省时间

    文件:
    firebase.js

    import firebase from 'firebase/app'
    import 'firebase/auth'
    import 'firebase/database'
    
    
    // Initialize Firebase
    const app = firebase.initializeApp(options)
    export const fb = firebase
    export const auth = app.auth()
    export const db = app.database()
    export const functions = app.functions()
    
    其他脚本文件中或
    *.vue中的
    changePassword()
    示例

    import { fb, auth } from './firebase.js'
    ...
    changePassword() {
      if (yourFormValidation == true) {
        let user = auth.currentUser
    
        const credentials = fb.auth.EmailAuthProvider.credential(
          user.email,
          this.current_password
        )
        user.reauthenticateAndRetrieveDataWithCredential(credentials)
          .then(() => {
            user.updatePassword(this.new_password)
              .then(() => {
                console.log('your password was successfully changed.')
              })
              .catch(error => console.log(error))
          })
          .catch(error => console.log(error.message))
      }
    }
    
    我遇到的
    无法读取未定义“
    的属性“credential”…

    仅从./firebase.js导入
    {auth},然后调用
    auth.EmailAuthProvider()

    如何访问…上的其他类

  • firebase.js中的导出常量fb=firebase

  • import firebase from 'firebase/app'
    import 'firebase/auth'
    import 'firebase/database'
    
    
    // Initialize Firebase
    const app = firebase.initializeApp(options)
    export const fb = firebase
    export const auth = app.auth()
    export const db = app.database()
    export const functions = app.functions()
    
  • 从“/firebase.js”导入{fb,auth}
    编写函数的地方

  • 调用
    fb.auth.EmailAuthProvider.credential()
    或其他需要的类


  • 您可以使用凭据的属性进行尝试吗?出于某种原因,my
    firebase.auth.OAuthCredential
    或(firebase.auth.AuthCredential)返回
    未定义的
    。用户已被授权,这听起来像是非常有用的信息,可以包含在您的问题中。不幸的是,我无法进一步帮助您:(您可以尝试使用凭据的属性吗?出于某种原因,my
    firebase.auth.OAuthCredential
    或(firebase.auth.AuthCredential)返回
    未定义的
    。用户已被授权,这听起来像是非常有用的信息,可以包含在您的问题中。不幸的是,我无法进一步帮助您:(这不是我问题的答案这不是我问题的答案对于凭证,这两个参数(
    email
    password
    )来自哪里?@FiringBlanks查看凭证,这两个参数(
    email
    password
    )来自哪里?@FiringBlanks查看