Firebase重新身份验证和RetrieveDataWithCredential问题



方法reauthenticateAndRetrieveDataWithCredential需要credential

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

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

错误消息

reauthenticateAndRetrieveDataWithCredential失败:第一个参数"credential"必须是有效的凭据。

我只有宣誓身份验证(没有电子邮件+密码(。所以我不知道credential防火基地需要什么。有什么帮助吗?

编辑:由于某些原因,我的firebase.auth.OAuthCredential或(firebase.auth.AuthCredential(返回未定义。用户已签名In/authid。

在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))
}
}

我在哪里遇到Cannot read property 'credential' of undefined"

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

如何访问firebase.auth((上的其他类…

firebase.js中的export const fb = firebase
  • import { fb, auth } from './firebase.js'您编写函数的位置

  • 呼叫fb.auth.EmailAuthProvider.credential()或其他需要的类

  • 重新验证用户的文档显示了以下示例:

    var user = firebase.auth().currentUser;
    var credential;
    // Prompt the user to re-provide their sign-in credentials
    user.reauthenticateAndRetrieveDataWithCredential(credential).then(function() {
    // User re-authenticated.
    }).catch(function(error) {
    // An error happened.
    });
    

    您的代码未能正确实现注释。您需要向用户显示一个提示,再次提供他们的凭据,将这些凭据放入正确的凭据对象类型中,然后传入。

    例如:

    var credential = firebase.auth.EmailAuthProvider.credential(
    email,
    password
    );
    

    您需要使用订阅来监视更改。使用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
    

    相关内容

    • 没有找到相关文章

    最新更新