В настоящее время я работаю над созданием своей собственной страницы сброса пароля в моем проекте Angular Ioni c, поскольку тот, который предлагает Firebase, не позволяет мне дважды подтвердить свой новый пароль. Однако я столкнулся с проблемой, когда после нажатия на ссылку сброса пароля на go на моей собственной размещенной странице для сброса пароля возникает эта ошибка.
URL: https: // <>. firebaseapp.com/resetpassword?mode=resetPassword&oobCode=ngJAYwAiYPQv8Gx-FLsRBXY4IePBpIH-ZiFYbhdmdIsAAAFwGeOxEA&apiKey=<>&lang=en * 100 * * 100 * * 100 * * * 100 * ** * 100 * ** 100 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * служить, можно на go к странице, и она отображается как задумано. Я не уверен, почему у меня есть эта проблема. При запуске хостинга я установил для каталога publi c значение «sr c», которое содержит все коды для моего приложения Ioni c.
Вот мои коды для соответствующих страниц:
resetpassword.page.ts
import { Component, OnInit } from '@angular/core';
import * as firebase from 'firebase';
import { Router, ActivatedRoute } from '@angular/router';
import { AuthService } from '../shared/services/auth.service';
import { FormGroup, FormControl, Validators } from '@angular/forms';
@Component({
selector: 'app-resetpassword',
templateUrl: './resetpassword.page.html',
styleUrls: ['./resetpassword.page.scss'],
})
export class ResetpasswordPage implements OnInit {
resetPasswordForm: FormGroup;
submitted: boolean;
mode: string;
actionCode: string;
continueUrl: string;
lang: string;
constructor(private router: Router, private activatedRoute: ActivatedRoute, private authService: AuthService) {
this.resetPasswordForm = new FormGroup({
npassword: new FormControl('', [Validators.required]),
rnpassword: new FormControl('', [Validators.required])
});
}
ngOnInit() {
document.addEventListener('DOMContentLoaded', function() {
// TODO: Implement getParameterByName()
// Get the action to complete.
this.mode = this.getParameterByName('mode');
// Get the one-time code from the query parameter.
this.actionCode = this.getParameterByName('oobCode');
// (Optional) Get the continue URL from the query parameter if available.
this.continueUrl = this.getParameterByName('continueUrl');
// (Optional) Get the language code if available.
this.lang = this.getParameterByName('lang') || 'en';
// Configure the Firebase SDK.
// This is the minimum configuration required for the API to be used.
var config = {
'apiKey': <<>apikey> // Copy this key from the web initialization
// snippet found in the Firebase console.
};
var app = firebase.initializeApp(config);
var auth = app.auth();
// Handle the user management action.
}, false);
}
confirmResetPassword() {
this.submitted = true;
if (this.resetPasswordForm.valid) {
if (this.resetPasswordForm.value.npassword === this.resetPasswordForm.value.rnpassword) {
var config = {
'apiKey': <<apikey>> // Copy this key from the web initialization
// snippet found in the Firebase console.
};
var app = firebase.initializeApp(config);
var auth = app.auth();
this.handleResetPassword(auth, this.actionCode, this.continueUrl, this.lang);
}
else {
alert("Your new passwords do not match. Try again.")
}
}
}
handleResetPassword(auth, actionCode, continueUrl, lang) {
// Localize the UI to the selected language as determined by the lang
// parameter.
var accountEmail;
// Verify the password reset code is valid.
auth.verifyPasswordResetCode(actionCode).then(function(email) {
var accountEmail = email;
// TODO: Show the reset screen with the user's email and ask the user for
// the new password.
// Save the new password.
auth.confirmPasswordReset(actionCode, this.resetPasswordForm.value.npassword).then(function(resp) {
// Password reset has been confirmed and new password updated.
// TODO: Display a link back to the app, or sign-in the user directly
// if the page belongs to the same domain as the app:
// auth.signInWithEmailAndPassword(accountEmail, newPassword);
// TODO: If a continue URL is available, display a button which on
// click redirects the user back to the app via continueUrl with
// additional state determined from that URL's parameters.
}).catch(function(error) {
// Error occurred during confirmation. The code might have expired or the
// password is too weak.
});
}).catch(function(error) {
// Invalid or expired action code. Ask user to try to reset the password
// again.
});
}
getParameterByName( name ){
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( window.location.href );
if( results == null )
return "";
else
return decodeURIComponent(results[1].replace(/\+/g, " "));
}
}
resetpassword.page. html
<ion-header>
<ion-toolbar>
<ion-title>resetpassword</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<form [formGroup]="resetPasswordForm" (ngSubmit)="confirmResetPassword()">
<ion-item>
<ion-label>New Password</ion-label>
<ion-input type="password" formControlName="npassword"></ion-input>
</ion-item>
<ion-item>
<ion-label>Retype New Password</ion-label>
<ion-input type="password" formControlName="rnpassword"></ion-input>
</ion-item>
<ion-button expand="block" color="tertiary" type="submit">Set New Password</ion-button>
</form>
<ion-label *ngIf = "resetPasswordForm.controls.npassword.errors && submitted" color="danger">
New Account Password is required.
</ion-label>
<br>
<ion-label *ngIf = "resetPasswordForm.controls.rnpassword.errors && submitted" color="danger">
Retype New Account Password is required.
</ion-label>
</ion-content>
Я следовал инструкциям с этого сайта Google Firebase (https://firebase.google.com/docs/auth/custom-email-handler).
Большое спасибо всем, кто отвечает заранее!
С наилучшими пожеланиями, Даниэль