Firebase web user.reauthenticate에 필요한 "credential" 개체를 만드는 방법자격 증명() 메서드를 사용하시겠습니까?
새 문서의 (명확하지 않은) 예:
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 })
(문서에 하나의 인수만 언급됨)
운이 없습니다 :(
PS: 새 문서에서 관련 정보를 검색하는 데 허비한 시간을 계산하지 않습니다.멋진 firebase.com 문서가 너무 그립지만 firebase.storage를 위해 v3 이상으로 전환하고 싶었습니다.
저는 그것을 성공적으로 만들 수 있었습니다. 문서는 철저하지만 읽기 어려운 API 참조에 너무 많은 시간을 보내고 싶지 않은 사람을 위해 이것을 포함하도록 업데이트되어야 합니다.
파이어베이스 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);
파이어베이스 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를 사용하는 앱이 이를 지원해야 합니다. 그렇지 않으면 사용자가 어느 시점에서 정체될 것입니다.
전체 답변 - 다음을 사용할 수 있습니다.
var user = firebase.auth().currentUser;
var credentials = firebase.auth.EmailAuthProvider.credential(
user.email,
'yourpassword'
);
user.reauthenticateWithCredential(credentials);
참고로reauthenticateWithCredential
의 업데이트된 버전입니다.reauthenticate()
재인증에는 여러 가지 방법이 있습니다.참조: https://firebase.google.com/docs/reference/js/firebase.User
firebase
.auth()
.currentUser.reauthenticateWithPopup(new firebase.auth.GoogleAuthProvider())
.then((UserCredential) => {
console.log("re-outh", UserCredential);
});
앱에서 여러 인증 방법을 허용하는 경우 먼저 사용된 개인 정보 보호자를 확인해야 할 수 있습니다.이 작업은 다음을 통해 수행할 수 있습니다.firebase.auth().currentUser.providerData
배열
새로운 소방 기지 버전 9.*
import {
EmailAuthProvider,
getAuth,
reauthenticateWithCredential,
} from "firebase/auth";
const auth = getAuth();
let credential = EmailAuthProvider.credential(
auth.currentUser.email,
password
);
reauthenticateWithCredential(auth.currentUser, credential)
.then(result => {
// User successfully reauthenticated. New ID tokens should be valid.
})
저는 이것에 대한 서류가 꽤 명확하지 않다는 것에 동의합니다.그러나 API 참조를 조금 더 자세히 살펴보니 파이어베이스가 발견되었습니다.Auth.AuthCredential과 이것은 당신이 그것을 전달할 것이라고 생각합니다.reauthenticate()
.
여기서 추측하지만 저는 기록을 시작할 것입니다.firebase.auth()
있는지 없는지 확인하기 위해credential
거기에 이의를 제기합니다.
다음과 같이 보일 것으로 예상됩니다.
user.reauthenticate(firebase.auth().credential).then(function() {
이제 게시된 두 답변이 모두 사용되지 않기 때문에 방법에 약간의 변화가 있습니다.
val user = auth.currentUser
user?.let { _user ->
val credentials = EmailAuthProvider.getCredential(
_user.email!!,
"userPassword"
)
_user.reauthenticate(credentials).addOnCompleteListener { _reauthenticateTask ->
}
final FirebaseUser fireBaseUser = FirebaseAuth.getInstance().getCurrentUser();
AuthCredential credential = EmailAuthProvider.getCredential(fireBaseUser.getEmail(), storedPassword);
fireBaseUser.reauthenticate(credential).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> reAuthenticateTask) {
if (!reAuthenticateTask.isSuccessful())
...
}
});
언급URL : https://stackoverflow.com/questions/37811684/how-to-create-credential-object-needed-by-firebase-web-user-reauthenticatewith
'programing' 카테고리의 다른 글
Android에서 상태 표시줄 색을 변경하는 방법은 무엇입니까? (0) | 2023.06.05 |
---|---|
인스턴스 상태 저장을 사용하여 활동 상태를 저장하려면 어떻게 해야 합니까? (0) | 2023.06.05 |
배열 값으로 열을 순차적으로 업데이트 (0) | 2023.06.05 |
목록의 각 요소에 정수를 추가하는 방법은 무엇입니까? (0) | 2023.06.05 |
NodeJS - "소켓 전화 끊기"가 실제로 무엇을 의미합니까? (0) | 2023.06.05 |