aboutsummaryrefslogtreecommitdiff
path: root/Timeline/ClientApp/src/app/user/internal-user-service
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-04-11 19:18:37 +0800
committercrupest <crupest@outlook.com>2019-04-11 19:18:37 +0800
commit842995aaed29cba1ac17e9a671e4b0782ad65c99 (patch)
tree6f0ae118627b6fef2610a36b3cdaa7ef2f8fae7a /Timeline/ClientApp/src/app/user/internal-user-service
parentd7bfb99d41ac74763f1a1b96a850633994e1efff (diff)
downloadtimeline-842995aaed29cba1ac17e9a671e4b0782ad65c99.tar.gz
timeline-842995aaed29cba1ac17e9a671e4b0782ad65c99.tar.bz2
timeline-842995aaed29cba1ac17e9a671e4b0782ad65c99.zip
Add remember me.
Diffstat (limited to 'Timeline/ClientApp/src/app/user/internal-user-service')
-rw-r--r--Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.spec.ts39
-rw-r--r--Timeline/ClientApp/src/app/user/internal-user-service/internal-user.service.ts10
2 files changed, 30 insertions, 19 deletions
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 be6631eb..8d081402 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
@@ -82,33 +82,40 @@ describe('InternalUserService', () => {
})));
});
- it('login should work well', () => {
+ describe('login should work well', () => {
const mockUserCredentials: UserCredentials = {
username: 'user',
password: 'user'
};
- const service: InternalUserService = TestBed.get(InternalUserService);
+ function createTest(rememberMe: boolean) {
+ return () => {
+ const service: InternalUserService = TestBed.get(InternalUserService);
- service.tryLogin(mockUserCredentials).subscribe(result => {
- expect(result).toEqual(mockUserInfo);
- });
+ service.tryLogin({ ...mockUserCredentials, rememberMe: rememberMe }).subscribe(result => {
+ expect(result).toEqual(mockUserInfo);
+ });
- const httpController = TestBed.get(HttpTestingController) as HttpTestingController;
+ const httpController = TestBed.get(HttpTestingController) as HttpTestingController;
- httpController.expectOne((request: HttpRequest<CreateTokenRequest>) =>
- request.url === createTokenUrl && request.body !== null &&
- request.body.username === mockUserCredentials.username &&
- request.body.password === mockUserCredentials.password).flush(<CreateTokenResponse>{
- token: mockToken,
- userInfo: mockUserInfo
- });
+ httpController.expectOne((request: HttpRequest<CreateTokenRequest>) =>
+ request.url === createTokenUrl && request.body !== null &&
+ request.body.username === mockUserCredentials.username &&
+ request.body.password === mockUserCredentials.password).flush(<CreateTokenResponse>{
+ token: mockToken,
+ userInfo: mockUserInfo
+ });
- expect(service.currentUserInfo).toEqual(mockUserInfo);
+ expect(service.currentUserInfo).toEqual(mockUserInfo);
- httpController.verify();
+ httpController.verify();
+
+ expect(mockLocalStorage.getItem(TOKEN_STORAGE_KEY)).toBe(rememberMe ? mockToken : null);
+ }
+ }
- expect(mockLocalStorage.getItem(TOKEN_STORAGE_KEY)).toBe(mockToken);
+ it('remember me should work well', createTest(true));
+ it('not remember me should work well', createTest(false));
});
// TODO: test on error situations.
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 3f6147af..6de355f2 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
@@ -26,6 +26,10 @@ export type SnackBarTextKey = Exclude<keyof typeof snackBarText, 'ok'>;
export const TOKEN_STORAGE_KEY = 'token';
+export interface LoginInfo extends UserCredentials {
+ rememberMe: boolean;
+}
+
/**
* This service is only used internal in user module.
*/
@@ -103,12 +107,12 @@ export class InternalUserService {
}]);
}
- tryLogin(credentials: UserCredentials, options: { remember: boolean } = { remember: true }): Observable<UserInfo> {
+ tryLogin(info: LoginInfo): Observable<UserInfo> {
if (this.token) {
return throwError(new AlreadyLoginError());
}
- return this.httpClient.post<CreateTokenResponse>(createTokenUrl, <CreateTokenRequest>credentials).pipe(
+ return this.httpClient.post<CreateTokenResponse>(createTokenUrl, <CreateTokenRequest>info).pipe(
catchError((error: HttpErrorResponse) => {
if (error.error instanceof ErrorEvent) {
console.error('An error occurred when login: ' + error.error.message);
@@ -123,7 +127,7 @@ export class InternalUserService {
}),
map(result => {
this.token = result.token;
- if (options.remember) {
+ if (info.rememberMe) {
this.window.localStorage.setItem(TOKEN_STORAGE_KEY, result.token);
}
this.userInfoSubject.next(result.userInfo);