I'm making a youtube playlist project with Gooogle OAuth, I met a little issue while handling the authentication process, the variable isAuthorized
is where I store the user sign-in state, I can see in the console that it's changed to true after user sign in, but it's still false in the View section. I wonder how exactly I solve this?
below is my code for the Model section
GoogleAuth: any;user: any;isAuthorized = false; ngOnInit(): void { // Load auth2 library gapi.load("client:auth2", this.initClient); } loadClient = () => { gapi.client.setApiKey(this.API_KEY); return gapi.client // same as "https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest" .load("youtube", "v3") .then( () => { console.log("GAPI client loaded for API"); }, function (err) { console.error("Error loading GAPI client for API", err); } ); } // Init API client library and set up sign in listeners initClient = () => { gapi.client .init({ discoveryDocs: this.DISCOVERY_DOCS, clientId: this.CLIENT_ID, scope: this.SCOPES, }) .then(() => { this.GoogleAuth = gapi.auth2.getAuthInstance(); // Listen for sign-in state changes. this.GoogleAuth.isSignedIn.listen(this.handleSigninStatus); // Handle initial sign-in state. (Determine if user is already signed in.) this.handleSigninStatus(); this.loadClient() }); } handleSigninStatus = () => { this.user = this.GoogleAuth.currentUser.get(); this.isAuthorized = this.user.hasGrantedScopes(this.SCOPES); if (this.isAuthorized) { this.loadClient() // this.getChannelInfo() //display playlist data } else { //do nothing } } // Handle login handleAuthClick = () => { this.GoogleAuth.signIn({ scope: this.SCOPES }) .then(() => { console.log("Sign-in successful"); // this.isLoggedIn = true this.getChannelInfo() }, (err: any) => { console.error("Error signing in", { err }) }); } // Handle logout handleSignoutClick = () => { this.GoogleAuth.signOut(); this.GoogleAuth.disconnect(); // gapi.auth2.getAuthInstance().signOut().then(() => { this.googleUser = null }); }
and this is my HTML, aka the View section:
<mat-toolbar><a href="/">My Application {{isAuthorized}}</a><ng-template [ngIf]="isAuthorized" [ngIfElse]="loggedOut"><button mat-raised-button color="warn" id="signout-button" (click)="handleSignoutClick()">Log Out</button></ng-template><ng-template #loggedOut><button mat-raised-button color="warn" id="authorize-button" (click)="handleAuthClick()">Log In</button></ng-template></mat-toolbar>