AngularFire2 是否支持更新用户凭据?
Does AngularFire2 support update of user credentials?
我正在结合使用 AngularFire2 (2.0.0-beta.2) 和 angular2 (2.0.0-rc.4)。使用 Angularfire 我可以通过编程方式创建一个用户 (email/password)
angularFire.auth.createUser({email : this.email, password; this.password})
该部分按预期工作。随后,我想更新电子邮件地址或密码。我已经检查了 AngularFire 源,但似乎没有执行此操作的机制。我的评估是否正确?如果我是对的,我应该期望在即将发布的版本中看到一种机制,还是应该只使用本机 Firebase 机制?
您希望使用 $firebaseAuth()
。只需将其注入您的控制器并使用
$firebaseAuth().$updateEmail("email@email.com");
$firebaseAuth().$updatePassword("newpass123");
我将尝试回答我自己的问题。我认为 AngularFire2 public API 缺少一些与 firebase 身份验证相关的功能。例如,我认为当前版本的 AngularFire (2.0.0-beta2) 无法更新电子邮件地址或密码,或发送密码重置电子邮件。我认为解决目前这个缺点的方法是获取原生的 firebase objet 并使用原生的 firebase 方法来解决。但是,我一直无法弄清楚如何使用 AngularFire2 访问本机 FireBase 对象。我已经发布了 this 个问题,看看是否有人可以帮助我做到这一点。
我认为我的回答会有所帮助,密码 可以通过 firebase-admin 使用云功能更改,您只需通过来自客户端的电子邮件和新密码(Angular,ionic,...)
云函数:
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
const cors = require('cors')({ origin: true });
export const resetUserPassword = functions.https.onRequest( async (req, res) => {
return cors( req, res, async () => {
const email = req.body.data.email;
const password = req.body.data.password;
admin.auth().getUserByEmail(email)
.then((getUserRecord) => {
admin.auth().updateUser(getUserRecord.uid, {
email,
password
})
.then(function(userRecord) {
res.send({
status: 200,
data: userRecord
})
})
.catch(function(error) {
res.send({
status: 500,
data: error
})
});
})
.catch((error) => {
console.log('Error fetching user data:', error);
});
})
});
客户端代码(IONIC):
import { AngularFireFunctions } from '@angular/fire/functions';
export class AuthService {
constructor(
private functions: AngularFireFunctions
) {}
resetUserPassword() {
const userNewCredential = {email: 'user-email', password: 'your-new-password'};
this.functions.httpsCallable('resetUserPassword')
(userNewCredential).toPromise().then((updatedUser) => {
console.log(updatedUser);
}).catch((error) => console.log(error));
}
我正在结合使用 AngularFire2 (2.0.0-beta.2) 和 angular2 (2.0.0-rc.4)。使用 Angularfire 我可以通过编程方式创建一个用户 (email/password)
angularFire.auth.createUser({email : this.email, password; this.password})
该部分按预期工作。随后,我想更新电子邮件地址或密码。我已经检查了 AngularFire 源,但似乎没有执行此操作的机制。我的评估是否正确?如果我是对的,我应该期望在即将发布的版本中看到一种机制,还是应该只使用本机 Firebase 机制?
您希望使用 $firebaseAuth()
。只需将其注入您的控制器并使用
$firebaseAuth().$updateEmail("email@email.com");
$firebaseAuth().$updatePassword("newpass123");
我将尝试回答我自己的问题。我认为 AngularFire2 public API 缺少一些与 firebase 身份验证相关的功能。例如,我认为当前版本的 AngularFire (2.0.0-beta2) 无法更新电子邮件地址或密码,或发送密码重置电子邮件。我认为解决目前这个缺点的方法是获取原生的 firebase objet 并使用原生的 firebase 方法来解决。但是,我一直无法弄清楚如何使用 AngularFire2 访问本机 FireBase 对象。我已经发布了 this 个问题,看看是否有人可以帮助我做到这一点。
我认为我的回答会有所帮助,密码 可以通过 firebase-admin 使用云功能更改,您只需通过来自客户端的电子邮件和新密码(Angular,ionic,...)
云函数:
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
const cors = require('cors')({ origin: true });
export const resetUserPassword = functions.https.onRequest( async (req, res) => {
return cors( req, res, async () => {
const email = req.body.data.email;
const password = req.body.data.password;
admin.auth().getUserByEmail(email)
.then((getUserRecord) => {
admin.auth().updateUser(getUserRecord.uid, {
email,
password
})
.then(function(userRecord) {
res.send({
status: 200,
data: userRecord
})
})
.catch(function(error) {
res.send({
status: 500,
data: error
})
});
})
.catch((error) => {
console.log('Error fetching user data:', error);
});
})
});
客户端代码(IONIC):
import { AngularFireFunctions } from '@angular/fire/functions';
export class AuthService {
constructor(
private functions: AngularFireFunctions
) {}
resetUserPassword() {
const userNewCredential = {email: 'user-email', password: 'your-new-password'};
this.functions.httpsCallable('resetUserPassword')
(userNewCredential).toPromise().then((updatedUser) => {
console.log(updatedUser);
}).catch((error) => console.log(error));
}