Browse Source

bugfix: login problems

Carsten Porth 5 years ago
parent
commit
710f8f138d

+ 11 - 4
app/src/app/app.component.ts

@@ -1,5 +1,5 @@
 import { Component, ViewChild } from "@angular/core";
-import { Nav, Platform } from "ionic-angular";
+import { Nav, Platform, Events } from "ionic-angular";
 import { StatusBar } from "@ionic-native/status-bar";
 import { SplashScreen } from "@ionic-native/splash-screen";
 import { Storage } from "@ionic/storage";
@@ -30,7 +30,8 @@ export class MyApp {
     splashScreen: SplashScreen,
     private authProvider: AuthProvider,
     private twitter: TwitterApiProvider,
-    private storage: Storage
+    private storage: Storage,
+    private events: Events
   ) {
     platform.ready().then(() => {
       // Okay, so the platform is ready and our plugins are available.
@@ -39,6 +40,8 @@ export class MyApp {
       statusBar.styleDefault();
       splashScreen.hide();
       this.initApp();
+
+      this.events.subscribe("user:login", () => this.setUser());
     });
 
     this.pages = [
@@ -53,13 +56,17 @@ export class MyApp {
 
     if (isLoggedIn) {
       this.rootPage = HomePage;
-      const userId = await this.storage.get("userId");
-      this.user = await this.twitter.fetchUser(userId);
+      await this.setUser();
     } else {
       this.rootPage = LoginPage;
     }
   }
 
+  async setUser() {
+    const userId = await this.storage.get("userId");
+    this.user = await this.twitter.fetchUser(userId);
+  }
+
   showProfile(userId) {
     this.nav.push(ProfilePage, { userId });
   }

+ 7 - 3
app/src/pages/login/login.ts

@@ -5,10 +5,12 @@ import {
   NavParams,
   MenuController,
   AlertController,
-  ModalController
+  ModalController,
+  Events
 } from "ionic-angular";
 import { AuthProvider } from "../../providers/auth/auth";
 import { AboutPage } from "../about/about";
+import { HomePage } from "../home/home";
 
 @IonicPage()
 @Component({
@@ -22,7 +24,8 @@ export class LoginPage {
     private menuCtrl: MenuController,
     private alertCtrl: AlertController,
     private authProvider: AuthProvider,
-    private modalCtrl: ModalController
+    private modalCtrl: ModalController,
+    private events: Events
   ) {}
 
   ionViewDidLoad() {
@@ -39,7 +42,8 @@ export class LoginPage {
 
     this.authProvider
       .login()
-      .then(() => window.location.reload())
+      .then(() => this.events.publish("user:login"))
+      .then(() => this.navCtrl.setRoot(HomePage))
       .catch(err => this.alertCtrl.create(alertText).present());
   }
 

+ 18 - 6
app/src/providers/auth/auth.ts

@@ -2,12 +2,17 @@ import { HttpClient } from "@angular/common/http";
 import { Injectable } from "@angular/core";
 import { Storage } from "@ionic/storage";
 import firebase from "firebase";
+import { TwitterApiProvider } from "../twitter-api/twitter-api";
 
 @Injectable()
 export class AuthProvider {
   authProvider: any;
 
-  constructor(public http: HttpClient, private storage: Storage) {
+  constructor(
+    public http: HttpClient,
+    private storage: Storage,
+    private twitter: TwitterApiProvider
+  ) {
     console.log("Hello AuthProvider Provider");
 
     var config = {
@@ -29,7 +34,8 @@ export class AuthProvider {
       .auth()
       .signInWithRedirect(this.authProvider)
       .then(() => firebase.auth().getRedirectResult())
-      .then(this.setKeys);
+      .then(this.setKeys)
+      .then(() => this.twitter.initApi());
   }
 
   logout() {
@@ -42,9 +48,15 @@ export class AuthProvider {
     return accessToken && accessTokenKey;
   }
 
-  setKeys = result => {
-    this.storage.set("accessTokenKey", result.credential["accessToken"]);
-    this.storage.set("accessTokenSecret", result.credential["secret"]);
-    this.storage.set("userId", result.additionalUserInfo["profile"]["id"]);
+  setKeys = async result => {
+    await this.storage.set(
+      "accessTokenKey",
+      result["credential"]["accessToken"]
+    );
+    await this.storage.set("accessTokenSecret", result["credential"]["secret"]);
+    await this.storage.set(
+      "userId",
+      result["additionalUserInfo"]["profile"]["id_str"]
+    );
   };
 }

+ 1 - 1
app/src/providers/twitter-api/twitter-api.ts

@@ -11,7 +11,7 @@ export class TwitterApiProvider {
     this.initApi();
   }
 
-  private async initApi() {
+  public async initApi() {
     const access_token_key = await this.storage.get("accessTokenKey");
     const access_token_secret = await this.storage.get("accessTokenSecret");
     if (access_token_key && access_token_secret) {