diff options
author | 杨宇千 <crupest@outlook.com> | 2019-04-11 21:13:15 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-11 21:13:15 +0800 |
commit | 19cae15eba2bcede41b818e1b8ab7fd5ac92eb05 (patch) | |
tree | 34118752ae3015a26c0f6f3a02b3043806ce895a /Timeline/ClientApp | |
parent | 5b5ca3acb1b9decb5ad13798dc79ba2d58f2ce95 (diff) | |
parent | 63573d7c988e0bc1b7e82eeea53ecc3678b0a2f5 (diff) | |
download | timeline-19cae15eba2bcede41b818e1b8ab7fd5ac92eb05.tar.gz timeline-19cae15eba2bcede41b818e1b8ab7fd5ac92eb05.tar.bz2 timeline-19cae15eba2bcede41b818e1b8ab7fd5ac92eb05.zip |
Merge pull request #19 from crupest/18-createtoken
Change create token api.
Diffstat (limited to 'Timeline/ClientApp')
4 files changed, 32 insertions, 19 deletions
diff --git a/Timeline/ClientApp/src/app/user/internal-user-service/errors.ts b/Timeline/ClientApp/src/app/user/internal-user-service/errors.ts index 22e44dd6..3358a9d9 100644 --- a/Timeline/ClientApp/src/app/user/internal-user-service/errors.ts +++ b/Timeline/ClientApp/src/app/user/internal-user-service/errors.ts @@ -1,25 +1,29 @@ -export abstract class LoginError extends Error { } - -export class BadNetworkError extends LoginError { +export class BadNetworkError extends Error { constructor() { super('Network is bad.'); } } -export class AlreadyLoginError extends LoginError { +export class AlreadyLoginError extends Error { constructor() { super('Internal logical error. There is already a token saved. Please call validateUserLoginState first.'); } } -export class BadCredentialsError extends LoginError { +export class BadCredentialsError extends Error { constructor() { super('Username or password is wrong.'); } } -export class UnknownError extends LoginError { +export class UnknownError extends Error { constructor(public internalError?: any) { super('Sorry, unknown error occured!'); } } + +export class ServerInternalError extends Error { + constructor(message?: string) { + super('Wrong server response. ' + message); + } +} diff --git a/Timeline/ClientApp/src/app/user/internal-user-service/http-entities.ts b/Timeline/ClientApp/src/app/user/internal-user-service/http-entities.ts index 5664cf7c..f52233c9 100644 --- a/Timeline/ClientApp/src/app/user/internal-user-service/http-entities.ts +++ b/Timeline/ClientApp/src/app/user/internal-user-service/http-entities.ts @@ -6,8 +6,9 @@ export const validateTokenUrl = '/api/User/ValidateToken'; export type CreateTokenRequest = UserCredentials; export interface CreateTokenResponse { - token: string; - userInfo: UserInfo; + success: boolean; + token?: string; + userInfo?: UserInfo; } export interface ValidateTokenRequest { diff --git a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts index 6906ed60..15755382 100644 --- a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts +++ b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts @@ -102,6 +102,7 @@ describe('InternalUserService', () => { request.url === createTokenUrl && request.body !== null && request.body.username === mockUserCredentials.username && request.body.password === mockUserCredentials.password).flush(<CreateTokenResponse>{ + success: true, token: mockToken, userInfo: mockUserInfo }); diff --git a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts index 6de355f2..66eafde9 100644 --- a/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts +++ b/Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts @@ -5,7 +5,7 @@ import { Router } from '@angular/router'; import { Observable, throwError, BehaviorSubject, of } from 'rxjs'; import { map, catchError, retry, switchMap, tap, filter } from 'rxjs/operators'; -import { AlreadyLoginError, BadCredentialsError, BadNetworkError, UnknownError } from './errors'; +import { AlreadyLoginError, BadCredentialsError, BadNetworkError, UnknownError, ServerInternalError } from './errors'; import { createTokenUrl, validateTokenUrl, CreateTokenRequest, CreateTokenResponse, ValidateTokenRequest, ValidateTokenResponse @@ -84,7 +84,7 @@ export class InternalUserService { if (userInfo) { return of(userInfo); } else { - return throwError(new Error('Wrong server response. IsValid is true but UserInfo is null.')); + return throwError(new ServerInternalError('IsValid is true but UserInfo is null.')); } } else { return of(null); @@ -117,21 +117,28 @@ export class InternalUserService { if (error.error instanceof ErrorEvent) { console.error('An error occurred when login: ' + error.error.message); return throwError(new BadNetworkError()); - } else if (error.status === 400) { - console.error('An error occurred when login: wrong credentials.'); - return throwError(new BadCredentialsError()); } else { console.error('An unknown error occurred when login: ' + error); return throwError(new UnknownError(error)); } }), - map(result => { - this.token = result.token; - if (info.rememberMe) { - this.window.localStorage.setItem(TOKEN_STORAGE_KEY, result.token); + switchMap(result => { + if (result.success) { + if (result.token && result.userInfo) { + this.token = result.token; + if (info.rememberMe) { + this.window.localStorage.setItem(TOKEN_STORAGE_KEY, result.token); + } + this.userInfoSubject.next(result.userInfo); + return of(result.userInfo); + } else { + console.error('An error occurred when login: server return wrong data.'); + return throwError(new ServerInternalError('Token or userInfo is null.')); + } + } else { + console.error('An error occurred when login: wrong credentials.'); + return throwError(new BadCredentialsError()); } - this.userInfoSubject.next(result.userInfo); - return result.userInfo; }) ); } |