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