aboutsummaryrefslogtreecommitdiff
path: root/Timeline/ClientApp
diff options
context:
space:
mode:
author杨宇千 <crupest@outlook.com>2019-04-11 21:13:15 +0800
committerGitHub <noreply@github.com>2019-04-11 21:13:15 +0800
commit19cae15eba2bcede41b818e1b8ab7fd5ac92eb05 (patch)
tree34118752ae3015a26c0f6f3a02b3043806ce895a /Timeline/ClientApp
parent5b5ca3acb1b9decb5ad13798dc79ba2d58f2ce95 (diff)
parent63573d7c988e0bc1b7e82eeea53ecc3678b0a2f5 (diff)
downloadtimeline-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')
-rw-r--r--Timeline/ClientApp/src/app/user/internal-user-service/errors.ts16
-rw-r--r--Timeline/ClientApp/src/app/user/internal-user-service/http-entities.ts5
-rw-r--r--Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts1
-rw-r--r--Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts29
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;
})
);
}