nil*_*lsi 23 android firebase firebase-authentication
我想为我的应用程序实现更改密码功能.
我包含com.google.firebase:firebase-auth:9.0.2
在我的build.gradle
文件中,到目前为止,一切都工作正常,直到我尝试实现更改密码功能.
我发现该FirebaseUser
对象有一个updatePassword
方法,它接受一个新密码作为参数.我可以使用这种方法并自己实现验证.但是,我需要用户的当前密码与输入的密码进行比较,我找不到获取密码的方法.
我还在对象上找到了另一种方法,Firebase
它接受旧密码,新密码和处理程序.问题是我还需要包括com.firebase:firebase-client-android:2.5.2+
访问这个类,当我尝试这个方法时,我得到以下错误:
在console.firebase.google.com上创建的项目必须使用firebase.google.com/docs/auth/中提供的新Firebase身份验证SDK
觉得我在这里错过了一些东西.实施此建议的方法是什么?什么时候使用什么依赖?
nil*_*lsi 41
我在Firebase文档中找到了一个方便的示例:
某些安全敏感操作(例如删除帐户,设置主电子邮件地址和更改密码)要求用户最近登录.如果您执行其中一项操作,并且用户已在很久以前登录,则操作失败并抛出FirebaseAuthRecentLoginRequiredException.发生这种情况时,通过从用户获取新的登录凭据并将凭据传递给reauthenticate来重新验证用户身份.例如:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
// Get auth credentials from the user for re-authentication. The example below shows
// email and password credentials but there are multiple possible providers,
// such as GoogleAuthProvider or FacebookAuthProvider.
AuthCredential credential = EmailAuthProvider
.getCredential("user@example.com", "password1234");
// Prompt the user to re-provide their sign-in credentials
user.reauthenticate(credential)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
user.updatePassword(newPass).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "Password updated");
} else {
Log.d(TAG, "Error password not updated")
}
}
});
} else {
Log.d(TAG, "Error auth failed")
}
}
});
Run Code Online (Sandbox Code Playgroud)
Jul*_*kar 17
在firebase中更改密码有点棘手.它不像我们通常用于更改服务器端脚本和数据库中的密码.要在您的应用中实施更改密码功能,首先您需要从FirebaseAuth获取用户的电子邮件或提示用户输入电子邮件,然后提示用户输入旧密码,因为您无法检索用户的密码,如Frank van Puffelen所说.之后你需要重新认证.一旦重新认证完成,如果成功,您可以使用updatePassword()
.我在下面添加了一个用于我自己的应用程序的示例.希望,它会帮助你.
private FirebaseUser user;
user = FirebaseAuth.getInstance().getCurrentUser();
final String email = user.getEmail();
AuthCredential credential = EmailAuthProvider.getCredential(email,oldpass);
user.reauthenticate(credential).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
user.updatePassword(newPass).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(!task.isSuccessful()){
Snackbar snackbar_fail = Snackbar
.make(coordinatorLayout, "Something went wrong. Please try again later", Snackbar.LENGTH_LONG);
snackbar_fail.show();
}else {
Snackbar snackbar_su = Snackbar
.make(coordinatorLayout, "Password Successfully Modified", Snackbar.LENGTH_LONG);
snackbar_su.show();
}
}
});
}else {
Snackbar snackbar_su = Snackbar
.make(coordinatorLayout, "Authentication Failed", Snackbar.LENGTH_LONG);
snackbar_su.show();
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
Fra*_*len 13
无法从Firebase身份验证中检索用户的当前密码.
允许用户更改密码的一种方法是显示一个对话框,输入他们当前的密码和他们想要的新密码.然后,您使用当前密码登录 (或重新验证)用户并调用updatePassword()
以更新它.
我在谷歌上搜索了一些关于重置 Firebase 密码的内容,并进入了这个页面。这很有帮助,但并没有让我一路走到终点:我仍然需要谷歌五到十分钟。所以我回来改进 VueJS 用户的答案。
我在这里看到很多代码使用“FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();” 在顶线。这是最受欢迎的两个答案中提到的一个难题。
但是我无法在我的项目中使用它,该项目是用 VueJS 编写的。所以我不得不去探索。
我发现的是Firebase 文档的另一页。这是人们从(我认为)获取引用代码的同一页面,但是文档是为 Web 而不是Android/Java编写的。
因此,如果您在这里使用 VueJS,请查看第一个链接。我认为它会有所帮助。“获取当前登录的用户”可能包含适合您项目的代码。我在那里找到的代码说:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
} else {
// No user is signed in.
}
});
Run Code Online (Sandbox Code Playgroud)
我在上面链接的那个页面(“另一个页面”)最终将我带到了 Web 文档的“设置用户密码”部分。此处的海报正确说明用户最近必须经过身份验证才能启动密码更新。尝试此链接以获取有关重新验证用户的更多信息。
“设置用户密码”:
// You can set a user's password with the updatePassword method. For example:
var user = firebase.auth().currentUser;
var newPassword = getASecureRandomPassword();
user.updatePassword(newPassword).then(function() {
// Update successful.
}).catch(function(error) {
// An error happened.
});
Run Code Online (Sandbox Code Playgroud)
“重新验证用户”
var user = firebase.auth().currentUser;
var credential;
// Prompt the user to re-provide their sign-in credentials
user.reauthenticateWithCredential(credential).then(function() {
// User re-authenticated.
}).catch(function(error) {
// An error happened.
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28727 次 |
最近记录: |