Я искал информацию об этом, но я не мог понять, что я должен делать. Мне нужно, чтобы в моем приложении Ioni c пользователь мог войти в систему и закрыть приложение, а при повторном входе сеанс входа в систему сохраняется. Как то, как работает твиттер, Instagram и эти приложения. Я читал, что если установить постоянство firebase в LOCAL, этого должно быть достаточно, но он не работает для меня. Я думаю, что это будет angular проблема, потому что я понимаю, что firebase работает с постоянными сессиями.
Мой app.module.ts
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy, RouterModule } from '@angular/router';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AppComponent } from './app.component';
import { AngularFireModule } from '@angular/fire/';
import { environment } from '../environments/environment';
import { routes } from './app-routing.module';
@NgModule({
declarations: [AppComponent],
entryComponents: [],
imports: [
BrowserModule,
CommonModule,
IonicModule.forRoot(),
AngularFireModule.initializeApp(environment.firebase),
RouterModule.forRoot(routes),
],
providers: [
StatusBar,
SplashScreen,
AngularFireAuth,
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
],
bootstrap: [AppComponent]
})
export class AppModule { }
Мой main.page.ts logInService.LogIn возвращает зарегистрированного пользователя и ноль в любом другом случае
import { AngularFireAuth } from '@angular/fire/auth';
import { LoginService } from './../../services/login.service';
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router'
import { User } from "../../clases/data"
import { FormGroup, FormBuilder, Validators } from "@angular/forms";
@Component({
selector: 'app-login',
templateUrl: './main.page.html',
styleUrls: ['./main.page.scss'],
})
export class MainPage implements OnInit {
protected email: "";
protected password: "";
protected errLabel: string = "";
public user;
credentialsForm: FormGroup;
constructor(private routes: Router, private fAuth: AngularFireAuth) {
let response = fAuth.auth.currentUser;
if (response != null) {
this.routes.navigateByUrl("/home");
console.log(response);
}
}
ngOnInit() {
if (this.fAuth?.auth?.currentUser != null)
this.routes.navigateByUrl("/home");
}
async onSumbit() {
let loginService = new LoginService(this.fAuth);
let user: User = new User(this.email, this.password);
let response = await loginService.logIn(user);
console.log("MainPage: ", response)
if (response != null) {
this.routes.navigateByUrl("/home")
}
else {
this.errLabel = "The password is not correct.";
}
}
}
My login.service.ts
import { User } from './../clases/data';
import { Injectable } from '@angular/core';
import { AngularFireAuth } from '@angular/fire/auth';
import * as firebase from "firebase/app";
@Injectable({
providedIn: 'root'
})
export class LoginService {
public isLogged: any = false;
constructor(public fAuth: AngularFireAuth)
{
fAuth.authState.subscribe(user => (this.isLogged = user))
}
async logIn(user: User)
{
var res = null;
res = firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION).then(async () =>
{
this.fAuth.auth.onAuthStateChanged(user => console.log(user));
let userReceived = await this.fAuth.auth.signInWithEmailAndPassword(user.email, user.pass).catch(() => {console.log("Error during login"); return (null)})
return (userReceived);
}).catch(() => {console.log("Error during setting log in persistence"); return (null)})
return (res);
}
async signUp(user: User)
{
return await this.fAuth.auth.createUserWithEmailAndPassword(user.email, user.pass).catch(
() => {
console.log("Error during the creation of the new user.")
return "The email already exists.";
}).then(
() => {
console.log("User created successfully")
return (this.updateProfile({displayName: user.name}));
}
)
}
async updateProfile(user)
{
return await this.fAuth.auth.currentUser.updateProfile(user).catch((error) => {console.log(error); return ("There was an error creating your user, try it again past a few minutes if it continues ocurring contact with us in it_problems@halamaui.com")}).then(() => null)
}
}