private clientSecret: string
private loginChanged: Subject<AuthStatus>
private user: AuthUser = null
+ private refreshingTokenObservable: Observable<any>
constructor (
private http: HttpClient,
}
refreshAccessToken () {
+ if (this.refreshingTokenObservable) return this.refreshingTokenObservable
+
console.log('Refreshing token...')
const refreshToken = this.getRefreshToken()
const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded')
- return this.http.post<UserRefreshToken>(AuthService.BASE_TOKEN_URL, body, { headers })
- .map(res => this.handleRefreshToken(res))
- .catch(err => {
- console.error(err)
- console.log('Cannot refresh token -> logout...')
- this.logout()
- this.router.navigate(['/login'])
-
- return Observable.throw({
- error: 'You need to reconnect.'
- })
- })
+ this.refreshingTokenObservable = this.http.post<UserRefreshToken>(AuthService.BASE_TOKEN_URL, body, { headers })
+ .map(res => this.handleRefreshToken(res))
+ .do(() => this.refreshingTokenObservable = null)
+ .catch(err => {
+ this.refreshingTokenObservable = null
+
+ console.error(err)
+ console.log('Cannot refresh token -> logout...')
+ this.logout()
+ this.router.navigate([ '/login' ])
+
+ return Observable.throw({
+ error: 'You need to reconnect.'
+ })
+ })
+
+ return this.refreshingTokenObservable
}
refreshUserInformation () {
return target
}
- handleError (err: HttpErrorResponse) {
+ handleError (err: any) {
let errorMessage
if (err.error instanceof Error) {
// A client-side or network error occurred. Handle it accordingly.
errorMessage = err.error.message
console.error('An error occurred:', errorMessage)
+ } else if (typeof err.error === 'string') {
+ errorMessage = err.error
} else if (err.status !== undefined) {
// A server-side error occurred.
if (err.error && err.error.errors) {