Home > Enterprise >  I am trying to redirect after logining in angular. "Argument of type 'string | null'
I am trying to redirect after logining in angular. "Argument of type 'string | null'

Time:12-20

here is my auth.service.ts

import { Injectable } from "@angular/core";
import { GoogleAuthProvider } from 'firebase/auth';
import { AngularFireAuth } from '@angular/fire/compat/auth';
import { Observable } from "rxjs/internal/Observable";
import firebase from 'firebase/compat/app';
import { ActivatedRoute, Router, RouterLink, RouterStateSnapshot } from "@angular/router";
 



@Injectable({ providedIn: 'root' }) 

export class AuthService {
  user$: Observable<firebase.User|null>;

  constructor(private afAuth:AngularFireAuth, private router:Router,private  route: ActivatedRoute) {
    this.user$ = afAuth.authState;
   }
  login() {
    let returnUrl = this.route.snapshot.queryParamMap.get('returnUrl') || '/';
    localStorage.setItem('returnUrl',returnUrl);
    this.afAuth.signInWithRedirect(new GoogleAuthProvider());
  }
  logout(){
    this.afAuth.signOut();
  }
 
}

and here is my app.component.ts

import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { AuthService } from './auth.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {
  constructor(private auth : AuthService, router:Router){
    auth.user$.subscribe(user=>{
      if(user){
        let returnUrl = localStorage.getItem('returnUrl');
        router.navigateByUrl(returnUrl)
      }
    });
  }
  
}

and the error is coming for router.navigateByUrl(returnUrl) line for returnUrl, the error is Argument of type 'string | null' is not assignable to parameter of type 'string | UrlTree'. Type 'null' is not assignable to type 'string | UrlTree'. I do not know how to solve this

CodePudding user response:

Because localStorage.getItem('returnUrl') returns either string or null,

the value of returnUrl is either string or null, but the navigateByUrl method doesn't accept null as a parameter.

so you need to set it, either way - a string, you can do it by giving it a default value:

let returnUrl = localStorage.getItem('returnUrl') || 'home-page';
  • Related