- {{'auth.forgot' | translate}}
+ {{'auth.forgot' | translate}}
- {{'auth.fb_login' | translate}}
- {{'auth.google_login' | translate}}
- {{'auth.signup_ad' | translate}}
+
+
+
+
+
+ {{'auth.signup_ad' | translate}}
{{'auth.signup' | translate}}
- {{'auth.terms_1' | translate}}{{'auth.terms_2' | translate}}{{'auth.terms_3' | translate}}
+ {{'auth.terms_1' | translate}}{{'auth.terms_2' | translate}}{{'auth.terms_3' | translate}}
diff --git a/src/app/pages/auth/login/login.page.scss b/src/app/pages/auth/login/login.page.scss
index e69de29..ead2136 100755
--- a/src/app/pages/auth/login/login.page.scss
+++ b/src/app/pages/auth/login/login.page.scss
@@ -0,0 +1,63 @@
+.btn-social {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ height: 44px;
+ border-radius: 4px;
+ border: none;
+ cursor: pointer;
+ font-size: 14px;
+ font-weight: 500;
+ letter-spacing: 0.06em;
+ margin-bottom: 12px;
+ padding: 0 12px;
+ transition: box-shadow 0.2s ease;
+
+ &__icon {
+ width: 20px;
+ height: 20px;
+ margin-right: 12px;
+ flex-shrink: 0;
+
+ &--apple {
+ width: 18px;
+ height: 18px;
+ }
+ }
+
+ &__label {
+ flex: 1;
+ text-align: center;
+ margin-right: 32px; // compensa el ancho del icono para centrar visualmente
+ text-transform: uppercase;
+ }
+
+ &:active {
+ box-shadow: inset 0 0 0 2px rgba(0, 0, 0, 0.15);
+ }
+}
+
+// Google: fondo blanco, borde gris, texto oscuro
+.btn-google {
+ background-color: #ffffff;
+ border: 1px solid #DADCE0;
+ color: #3c4043;
+ font-family: 'Roboto', sans-serif;
+
+ &:hover {
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
+ }
+}
+
+// Apple: fondo negro, texto blanco, font del sistema
+.btn-apple {
+ background-color: #000000;
+ color: #ffffff;
+ font-family: -apple-system, 'SF Pro Display', BlinkMacSystemFont, sans-serif;
+ border-radius: 6px;
+
+ &:hover {
+ background-color: #1a1a1a;
+ }
+}
diff --git a/src/app/pages/auth/login/login.page.ts b/src/app/pages/auth/login/login.page.ts
index 8e31442..890fcc8 100755
--- a/src/app/pages/auth/login/login.page.ts
+++ b/src/app/pages/auth/login/login.page.ts
@@ -4,22 +4,24 @@ import { NgForm } from '@angular/forms';
import { AuthService } from 'src/app/services/auth.service';
import { AlertService } from 'src/app/services/alert.service';
import { TranslateService } from '@ngx-translate/core';
-import { FacebookLogin, FacebookLoginResponse } from '@capacitor-community/facebook-login';
-import { GoogleAuth } from '@codetrix-studio/capacitor-google-auth';
+import { FirebaseAuthService } from 'src/app/services/firebase-auth.service';
import { Browser } from '@capacitor/browser';
+import { firstValueFrom } from 'rxjs';
@Component({
selector: 'app-login',
templateUrl: './login.page.html',
- styleUrls: ['./login.page.scss']
+ styleUrls: ['./login.page.scss'],
+ standalone: false
})
export class LoginPage implements OnInit {
- private loading: any;
+ private loading: HTMLIonLoadingElement | null = null;
constructor(
private authService: AuthService,
+ private firebaseAuthService: FirebaseAuthService,
private navCtrl: NavController,
private alertService: AlertService,
private translateService: TranslateService,
@@ -45,68 +47,73 @@ export class LoginPage implements OnInit {
this.loading = await this.loadingCtrl.create();
await this.loading.present();
- this.authService.login(form.value.email, form.value.password).subscribe(
- data => {
- if (this.loading) this.loading.dismiss();
- },
- error => {
- if (this.loading) this.loading.dismiss();
- if (JSON.stringify(error['status']) == '401') {
- this.alertService.presentToast(this.translateService.instant('alerts.login_error'));
- }
- else {
- this.alertService.presentToast(this.translateService.instant('alerts.error') + error['message']);
- console.log(error);
- }
- },
- () => {
- if (this.loading) this.loading.dismiss();
- this.dismissLogin();
- this.navCtrl.navigateRoot('/dashboard');
- this.alertService.presentToast(this.translateService.instant('alerts.login'));
- }
- );
+ try {
+ const idToken = await this.firebaseAuthService.signInWithEmail(
+ form.value.email,
+ form.value.password
+ );
+
+ this.authService.loginWithFirebase(idToken).subscribe(
+ (data: any) => {},
+ (error: any) => {
+ if (this.loading) this.loading.dismiss();
+ if (JSON.stringify(error['status']) == '401') {
+ this.alertService.presentToast(this.translateService.instant('alerts.login_error'));
+ } else {
+ this.alertService.presentToast(this.translateService.instant('alerts.error') + error['message']);
+ }
+ },
+ () => { this.navigateAfterLogin(); }
+ );
+ } catch (e: any) {
+ if (this.loading) this.loading.dismiss();
+ const msg = this.getFirebaseErrorMessage(e.code);
+ this.alertService.presentToast(msg);
+ }
}
- async loginFacebook() {
- this.loading = await this.loadingCtrl.create();
- await this.loading.present();
+ private async navigateAfterLogin() {
+ try {
+ await firstValueFrom(this.authService.user());
+ } catch { }
+ if (this.loading) this.loading.dismiss();
+ this.navCtrl.navigateRoot('/dashboard');
+ this.alertService.presentToast(this.translateService.instant('alerts.login'));
+ }
- try {
- // Login with permissions
- const result = await FacebookLogin.login({ permissions: ['public_profile', 'email'] });
+ private getFirebaseErrorMessage(code: string): string {
+ switch (code) {
+ case 'auth/wrong-password':
+ case 'auth/user-not-found':
+ case 'auth/invalid-credential':
+ return this.translateService.instant('alerts.login_error');
+ case 'auth/too-many-requests':
+ return this.translateService.instant('alerts.too_many_requests');
+ default:
+ return this.translateService.instant('alerts.error') + code;
+ }
+ }
- if (result.accessToken) {
- // Get user ID and Token
- const fb_id = result.accessToken.userId;
- const fb_token = result.accessToken.token;
+ async loginApple() {
+ this.loading = await this.loadingCtrl.create();
+ await this.loading.present();
- console.log("ID: " + fb_id);
- console.log("Token: " + fb_token);
+ try {
+ const idToken = await this.firebaseAuthService.signInWithApple();
- this.authService.login_register_fb(fb_token, fb_id).subscribe(
- data => {
- },
- error => {
- this.loading.dismiss();
- this.alertService.presentToast(this.translateService.instant('alerts.error') + error);
- console.log(error);
- },
- () => {
- this.loading.dismiss();
- this.dismissLogin();
- this.navCtrl.navigateRoot('/dashboard');
- this.alertService.presentToast(this.translateService.instant('alerts.login'));
- }
- );
- } else {
- this.loading.dismiss();
- this.alertService.presentToast(this.translateService.instant('alerts.timeout_error'));
- }
- } catch (e) {
- this.loading.dismiss();
- this.alertService.presentToast(this.translateService.instant('alerts.error') + e);
- }
+ this.authService.loginWithFirebase(idToken).subscribe(
+ (data: any) => {},
+ (error: any) => {
+ if (this.loading) this.loading.dismiss();
+ this.alertService.presentToast(this.translateService.instant('alerts.error') + error);
+ console.log(error);
+ },
+ () => { this.navigateAfterLogin(); }
+ );
+ } catch (e) {
+ if (this.loading) this.loading.dismiss();
+ this.alertService.presentToast(this.translateService.instant('alerts.error') + e);
+ }
}
async loginGoogle() {
@@ -114,32 +121,19 @@ export class LoginPage implements OnInit {
await this.loading.present();
try {
- const res = await GoogleAuth.signIn();
- console.log(res);
+ const idToken = await this.firebaseAuthService.signInWithGoogle();
- const google_id = res.id;
- const google_token = res.authentication.accessToken;
-
- console.log("ID: " + google_id);
- console.log("Token: " + google_token);
-
- this.authService.login_register_googlePlus(google_token, google_id).subscribe(
- data => {
- },
- error => {
- this.loading.dismiss();
+ this.authService.loginWithFirebase(idToken).subscribe(
+ (data: any) => {},
+ (error: any) => {
+ if (this.loading) this.loading.dismiss();
this.alertService.presentToast(this.translateService.instant('alerts.error') + error);
console.log(error);
},
- () => {
- this.loading.dismiss();
- this.dismissLogin();
- this.navCtrl.navigateRoot('/dashboard');
- this.alertService.presentToast(this.translateService.instant('alerts.login'));
- }
+ () => { this.navigateAfterLogin(); }
);
} catch (err) {
- this.loading.dismiss();
+ if (this.loading) this.loading.dismiss();
this.alertService.presentToast(this.translateService.instant('alerts.error') + err);
console.log(err);
}
diff --git a/src/app/pages/auth/register/register.page.html b/src/app/pages/auth/register/register.page.html
index a3d8702..84d2237 100755
--- a/src/app/pages/auth/register/register.page.html
+++ b/src/app/pages/auth/register/register.page.html
@@ -8,7 +8,7 @@