1. ホーム
  2. javascript

[解決済み] Firebase web user.reauthenticateWithCredential() メソッドが必要とする "credential" オブジェクトをどのように作成しますか?

2023-02-19 08:39:41

質問

の(不明瞭な)例では 新しいドキュメント :

var user = firebase.auth().currentUser;
var credential;
// Prompt the user to re-provide their sign-in credentials
user.reauthenticateWithCredential(credential).then(function() {

どのように作成すればよいのでしょうか? credential オブジェクトはどのように作成すればよいのでしょうか?

試してみました。

  • reauthenticateWithCredential(email, password) (ログイン方法と同様)
  • reauthenticateWithCredential({ email, password }) (ドキュメントでは引数は1つだけです)

運が悪いな :(

追記: 新しいドキュメントで関連情報を探すのに何時間も無駄にしたことは数え切れません...。素晴らしい firebase.com のドキュメントがとても恋しいのですが、firebase.storage の v3 以降に切り替えたいと思っていました。

どのように解決しましたか?

ドキュメントを更新して、これを含める必要があります。

Firebase 8.x

このようにクレデンシャルオブジェクトが作成されます。

const user = firebase.auth().currentUser;
const credential = firebase.auth.EmailAuthProvider.credential(
    user.email, 
    userProvidedPassword
);
// Now you can use that to reauthenticate
user.reauthenticateWithCredential(credential);


Firebase 9.x

(@Dako Junior さんの回答に感謝し、網羅性を高めるためにここに追加します)

import {
    EmailAuthProvider,
    getAuth,
    reauthenticateWithCredential,
} from 'firebase/auth'

const auth = getAuth()
const credential = EmailAuthProvider.credential(
    auth.currentUser.email,
    userProvidedPassword
)
const result = await reauthenticateWithCredential(
    auth.currentUser, 
    credential
)
// User successfully reauthenticated. New ID tokens should be valid.

注意事項

について質問されたことがあります。 userProvidedPassword について、それが最初のログインから保存された変数のようなものであるかどうか、質問しました。そうではなく、パスワード入力のある新しいダイアログ/ページを開き、ユーザがパスワードを入力します。 もう一度 .

私は、あなたが はいけません。 は、ユーザーパスワードを平文で保存することで回避しようとします。これは 通常の の機能です。例えばGMailの場合、セッションが切れたり、ハッキングの疑いがあったり、場所を変えたりすることがあります。このとき、GMailは再びパスワードを要求します。これが再認証です。

頻繁に起こることではありませんが、Firebaseを使用するアプリはこれをサポートしないと、ユーザーはどこかで立ち往生することになります。