Skip to content

Commit e26eb33

Browse files
committed
Added remember me option
1 parent 9a7ecbd commit e26eb33

5 files changed

Lines changed: 39 additions & 12 deletions

File tree

src/app/authentication/service/authentication.service.ts

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,12 @@ export class AuthenticationService {
2020

2121
private user: Observable<User>;
2222

23+
private rememberMe = false;
24+
2325
constructor(
2426
private http: HttpClient
2527
) {
26-
const localUser = localStorage.getItem(this.userKey);
27-
if (localUser) {
28-
const readUser = JSON.parse(localUser);
29-
this.userSubject = new BehaviorSubject<User>(readUser);
30-
} else {
31-
this.userSubject = new BehaviorSubject<User>(new User());
32-
}
33-
28+
this.userSubject = this.readUserFromLocal();
3429
this.user = this.userSubject.asObservable();
3530
}
3631

@@ -53,19 +48,41 @@ export class AuthenticationService {
5348
return this.user;
5449
}
5550

51+
public setRememberMe(remember: boolean) {
52+
this.rememberMe = remember;
53+
}
54+
55+
private readUserFromLocal(): BehaviorSubject<User> {
56+
let subject: BehaviorSubject<User>;
57+
58+
// If the user was stored, load it
59+
const localUser = localStorage.getItem(this.userKey);
60+
if (localUser) {
61+
// User found in local storage
62+
const readUser = JSON.parse(localUser);
63+
subject = new BehaviorSubject<User>(readUser);
64+
} else {
65+
// User not found
66+
// Use default user
67+
subject = new BehaviorSubject<User>(new User());
68+
}
69+
70+
return subject;
71+
}
72+
5673
private loadUser(status: LoginStatus): User {
5774
let loggedUser;
5875

5976
loggedUser = new User();
6077
if (status) {
78+
// Received data
6179
loggedUser.username = status.username;
6280
loggedUser.logged = status.logged;
6381
loggedUser.token = status.token;
6482

65-
if (loggedUser.logged) {
83+
if (this.rememberMe) {
84+
// Store user
6685
localStorage.setItem(this.userKey, JSON.stringify(loggedUser));
67-
} else {
68-
localStorage.removeItem(this.userKey);
6986
}
7087
}
7188

src/app/login/components/login-form/login-form.component.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
Password is required
1616
</div>
1717
</div>
18+
<div class="form-group">
19+
<label for="rememberMe">Remember me</label>
20+
<input type="checkbox" formControlName="rememberMe" class="form-check-input">
21+
</div>
1822
<button [disabled]="!canLogin()" class="btn btn-primary" [attr.aria-disabled]="!canLogin()" aria-label="Login">
1923
<span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>
2024
Login

src/app/login/components/login-form/login-form.component.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ export class LoginFormComponent {
1515

1616
public form = this.formBuilder.group({
1717
username: ['', Validators.required],
18-
password: ['', Validators.required]
18+
password: ['', Validators.required],
19+
rememberMe: [false, Validators.required]
1920
});
2021

2122
constructor(
@@ -28,6 +29,9 @@ export class LoginFormComponent {
2829
const user = new LoginUser();
2930
user.username = this.form.value.username;
3031
user.password = this.form.value.password;
32+
if(this.form.value.rememberMe){
33+
user.rememberMe = this.form.value.rememberMe;
34+
}
3135

3236
this.login.emit(user);
3337
}

src/app/login/model/login-user.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export class LoginUser {
22
username: string = '';
33
password: string = '';
4+
rememberMe: boolean = false;
45
}

src/app/login/view/login-view/login-view.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export class LoginViewComponent implements OnInit {
2828
}
2929

3030
public onLogin(login: LoginUser) {
31+
this.authenticationService.setRememberMe(login.rememberMe);
3132
this.authenticationService.login(login.username, login.password)
3233
.subscribe({
3334
next: user => {

0 commit comments

Comments
 (0)