也许我在文档中错过了这一点,但是我找不到任何相关的内容。
我希望我的用户必须输入他们当前的密码才能创建一个新的密码。据我所知,如果用户已经通过身份验证,则可以更新密码而无需提供当前密码。
尽管这可能相对安全,但我宁愿让他输入旧密码以防止其他人利用已经经过身份验证的会话(例如家庭成员等)并更改密码。
有什么方法可以做到这一点吗?
(我使用Admin SDK没有问题,因为我已经为这些事情设置了服务器)
也许我在文档中错过了这一点,但是我找不到任何相关的内容。
我希望我的用户必须输入他们当前的密码才能创建一个新的密码。据我所知,如果用户已经通过身份验证,则可以更新密码而无需提供当前密码。
尽管这可能相对安全,但我宁愿让他输入旧密码以防止其他人利用已经经过身份验证的会话(例如家庭成员等)并更改密码。
有什么方法可以做到这一点吗?
(我使用Admin SDK没有问题,因为我已经为这些事情设置了服务器)
var user = firebaseApp.auth().currentUser;
var credential = firebase.auth.EmailAuthProvider.credential(
firebase.auth().currentUser.email,
providedPassword
);
// Prompt the user to re-provide their sign-in credentials
user.reauthenticateWithCredential(credential).then(function() {
// User re-authenticated.
}).catch(function(error) {
// An error happened.
});
您可以使用重新验证 API 来实现此目的。我假设您想在允许用户更新密码之前验证当前用户的密码。这样,在 Web 中,您可以执行以下操作:
reauthenticateAndRetrieveDataWithCredential
- 已弃用
firebase.auth().currentUser.reauthenticateAndRetrieveDataWithCredential(
firebase.auth.EmailAuthProvider.credential(
firebase.auth().currentUser.email,
providedPassword
)
);
如果这成功了,那么你就可以调用
firebase.auth().currentUser.updatePassword(newPassword);
import { initializeApp } from "firebase/app";
import { getAuth } from "firebase/auth";
const app = initializeApp({
apiKey: "Enter your Api key",
authDomain: "Enter your Auth domain",
projectId: "Enter your Project id",
storageBucket: "Enter your Storage bucket",
messagingSenderId: "Enter Message Sender Id",
appId: "Enter your App Id",
});
const auth = getAuth(app);
import { EmailAuthProvider } from "firebase/auth";
const user = auth.currentUser
const passwordEnteredByUser = formPassword //get password from user using a form
const credential = EmailAuthProvider.credential(
user.email,
passwordEnteredByUser
);
import { reauthenticateWithCredential } from "firebase/auth";
reauthenticateWithCredential(user, credential)
.then((result) => {
//Password entered is correct
console.log(result)
})
.catch((error) => {
//Incorrect password or some other error
console.log(error)
});
signInWithEmailAndPassword()
正常进行身份验证。如果有影响的话,我在服务器端使用Node,在客户端使用React。 - ThatBrianDude