aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--client/src/app/core/auth/auth.service.ts32
-rw-r--r--client/src/app/shared/rest/rest-extractor.service.ts4
2 files changed, 23 insertions, 13 deletions
diff --git a/client/src/app/core/auth/auth.service.ts b/client/src/app/core/auth/auth.service.ts
index 69ae3e5e1..6223cde6d 100644
--- a/client/src/app/core/auth/auth.service.ts
+++ b/client/src/app/core/auth/auth.service.ts
@@ -39,6 +39,7 @@ export class AuthService {
39 private clientSecret: string 39 private clientSecret: string
40 private loginChanged: Subject<AuthStatus> 40 private loginChanged: Subject<AuthStatus>
41 private user: AuthUser = null 41 private user: AuthUser = null
42 private refreshingTokenObservable: Observable<any>
42 43
43 constructor ( 44 constructor (
44 private http: HttpClient, 45 private http: HttpClient,
@@ -144,6 +145,8 @@ export class AuthService {
144 } 145 }
145 146
146 refreshAccessToken () { 147 refreshAccessToken () {
148 if (this.refreshingTokenObservable) return this.refreshingTokenObservable
149
147 console.log('Refreshing token...') 150 console.log('Refreshing token...')
148 151
149 const refreshToken = this.getRefreshToken() 152 const refreshToken = this.getRefreshToken()
@@ -157,18 +160,23 @@ export class AuthService {
157 160
158 const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded') 161 const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded')
159 162
160 return this.http.post<UserRefreshToken>(AuthService.BASE_TOKEN_URL, body, { headers }) 163 this.refreshingTokenObservable = this.http.post<UserRefreshToken>(AuthService.BASE_TOKEN_URL, body, { headers })
161 .map(res => this.handleRefreshToken(res)) 164 .map(res => this.handleRefreshToken(res))
162 .catch(err => { 165 .do(() => this.refreshingTokenObservable = null)
163 console.error(err) 166 .catch(err => {
164 console.log('Cannot refresh token -> logout...') 167 this.refreshingTokenObservable = null
165 this.logout() 168
166 this.router.navigate(['/login']) 169 console.error(err)
167 170 console.log('Cannot refresh token -> logout...')
168 return Observable.throw({ 171 this.logout()
169 error: 'You need to reconnect.' 172 this.router.navigate([ '/login' ])
170 }) 173
171 }) 174 return Observable.throw({
175 error: 'You need to reconnect.'
176 })
177 })
178
179 return this.refreshingTokenObservable
172 } 180 }
173 181
174 refreshUserInformation () { 182 refreshUserInformation () {
diff --git a/client/src/app/shared/rest/rest-extractor.service.ts b/client/src/app/shared/rest/rest-extractor.service.ts
index b1e22a76c..8ed24c727 100644
--- a/client/src/app/shared/rest/rest-extractor.service.ts
+++ b/client/src/app/shared/rest/rest-extractor.service.ts
@@ -33,13 +33,15 @@ export class RestExtractor {
33 return target 33 return target
34 } 34 }
35 35
36 handleError (err: HttpErrorResponse) { 36 handleError (err: any) {
37 let errorMessage 37 let errorMessage
38 38
39 if (err.error instanceof Error) { 39 if (err.error instanceof Error) {
40 // A client-side or network error occurred. Handle it accordingly. 40 // A client-side or network error occurred. Handle it accordingly.
41 errorMessage = err.error.message 41 errorMessage = err.error.message
42 console.error('An error occurred:', errorMessage) 42 console.error('An error occurred:', errorMessage)
43 } else if (typeof err.error === 'string') {
44 errorMessage = err.error
43 } else if (err.status !== undefined) { 45 } else if (err.status !== undefined) {
44 // A server-side error occurred. 46 // A server-side error occurred.
45 if (err.error && err.error.errors) { 47 if (err.error && err.error.errors) {