方法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的需求。有帮助吗?
编辑:
由于某种原因,我的firebase.auth.OAuthCredential
或(firebase.auth.AuthCredential
)返回未定义。用户已登录/授权。
答案 0 :(得分:4)
documentation for reauthenticating the user显示了此示例:
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 );
答案 1 :(得分: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()
其他脚本文件中或changePassword()
内部的*.vue
的示例
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()上的其他课程...
export const fb = firebase
中的 firebase.js
import { fb, auth } from './firebase.js'
在哪里编写函数
调用fb.auth.EmailAuthProvider.credential()
或其他所需的类
答案 2 :(得分:0)
您需要使用订阅来监视更改。使用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