Firebaseでユーザーを再認証する方法についてサポートをいただければ幸いです。ドキュメントにその使用方法が説明されていない場合、これらすべての優れた機能を追加することに意味があるのだろうか。
現在、これは私が試していることであり、機能していません。 cannot read property 'credential' of undefined
としてのエラー
コンストラクターの場合:
constructor(@Inject(FirebaseApp) firebaseApp: any) {
this.auth = firebaseApp.auth();
console.log(this.auth);
}
次に関数
changePassword(passwordData) {
if(passwordData.valid) {
console.log(passwordData.value);
// let us reauthenticate first irrespective of how long
// user's been logged in!
const user = this.auth.currentUser;
const credential = this.auth.EmailAuthProvider.credential(user.email, passwordData.value.oldpassword);
console.log(credential);
this.auth.reauthenticate(credential)
.then((_) => {
console.log('User reauthenticated');
this.auth.updatePassword(passwordData.value.newpassword)
.then((_) => {
console.log('Password changed');
})
.catch((error) => {
console.log(error);
})
})
.catch((error) => {
console.log(error);
})
}
}
reauthenticate()
メソッドは、 firebase.auth.Auth 自体ではなく、 firebase.User で呼び出されます。
var user = firebase.app.auth().currentUser;
var credentials = firebase.auth.EmailAuthProvider.credential('[email protected]', 'firebase');
user.reauthenticate(credentials);
更新(2017年7月):
Firebase WebSDKの4.0バージョンにはいくつかの重大な変更があります。 リリースノート から:
速報:
firebase.User.prototype.reauthenticate
は削除され、firebase.User.prototype.reauthenticateWithCredential
。
私の知る限り、reauthenticateWithCredential
は古いメソッドのドロップイン置換です。
これは、ユーザーが(a)Firebaseで再認証し、(b)再認証後にパスワードを変更できるようにするコードです。これを書いている間、私は約1時間調査したので、誰かが1分節約できることを願っています。
VueJSで書いた:
changePassword() {
let self = this; // i use "self" to get around scope issues
var user = firebase.auth().currentUser;
var credential = firebase.auth.EmailAuthProvider.credential(
this.$store.state.userId, // references the user's email address
this.oldPassword
);
user.reauthenticateWithCredential(credential)
.then(function() {
// User re-authenticated.
user.updatePassword(self.newPassword)
.then(function() {
console.log("Password update successful!");
})
.catch(function(error) {
console.log(
"An error occurred while changing the password:",
error
);
});
})
.catch(function(error) {
console.log("Some kinda bug: ", error);
// An error happened.
});
2019年5月現在、若干の変更があります。詳細をご覧ください こちら 。コードは次のとおりです。
var user = firebase.auth().currentUser;
var credential = firebase.auth.EmailAuthProvider.credential(user.email, password);
// Prompt the user to re-provide their sign-in credentials
return user.reauthenticateWithCredential(credential);