feature-libs/asm/root/services/asm-auth-storage.service.ts
With AsmAuthStorageService apart from storing the token we also need to store information for which user is the token (regular user or CS Agent).
Overrides AuthStorageService.
Properties |
|
Methods |
| clearEmulatedUserToken |
clearEmulatedUserToken()
|
|
When we start emulation from the UI (not by ASM login) we can't restore user session on cs agent logout. Only available solution is to drop session we could restore, to avoid account hijack.
Returns :
void
|
| getEmulatedUserToken |
getEmulatedUserToken()
|
|
Get token for previously user session, when it was interrupted by CS agent login.
Returns :
AuthToken | undefined
previously logged in user token. |
| getTokenTarget |
getTokenTarget()
|
|
Get target user for current auth token.
Returns :
Observable<TokenTarget>
observable with TokenTarget |
| setEmulatedUserToken | ||||||
setEmulatedUserToken(token: AuthToken)
|
||||||
|
Save user token on CS agent login.
Parameters :
Returns :
void
|
| setTokenTarget | ||||||
setTokenTarget(tokenTarget: TokenTarget)
|
||||||
|
Set new token target.
Parameters :
Returns :
void
|
| switchTokenTargetToCSAgent |
switchTokenTargetToCSAgent()
|
|
Change token target to CS Agent.
Returns :
void
|
| switchTokenTargetToUser |
switchTokenTargetToUser()
|
|
Change token target to user.
Returns :
void
|
| Protected decode |
decode(key: string, value: any)
|
|
Inherited from
AuthStorageService
|
|
Defined in
AuthStorageService:33
|
|
Returns :
any
|
| Protected encode |
encode(key: string, value: any)
|
|
Inherited from
AuthStorageService
|
|
Defined in
AuthStorageService:40
|
|
Returns :
any
|
| getItem | ||||||
getItem(key: string)
|
||||||
|
Inherited from
AuthStorageService
|
||||||
|
Defined in
AuthStorageService:79
|
||||||
|
Get parameter from the token (eg. access_token)
Parameters :
Returns :
any
|
| getToken |
getToken()
|
|
Inherited from
AuthStorageService
|
|
Defined in
AuthStorageService:59
|
|
Returns complete token (all fields).
Returns :
Observable<AuthToken>
observable emitting AuthToken |
| removeItem | ||||||
removeItem(key: string)
|
||||||
|
Inherited from
AuthStorageService
|
||||||
|
Defined in
AuthStorageService:92
|
||||||
|
Removes parameter from the token (eg. access_token)
Parameters :
Returns :
void
|
| setItem |
setItem(key: string, data: any)
|
|
Inherited from
AuthStorageService
|
|
Defined in
AuthStorageService:105
|
|
Sets parameter of the token (eg. access_token)
Returns :
void
|
| setToken | ||||||
setToken(token: AuthToken)
|
||||||
|
Inherited from
AuthStorageService
|
||||||
|
Defined in
AuthStorageService:68
|
||||||
|
Set current value of token.
Parameters :
Returns :
void
|
| Protected _tokenTarget$ |
Type : Observable<TokenTarget>
|
Default value : new BehaviorSubject<TokenTarget>(TokenTarget.User)
|
| Protected Optional emulatedUserToken |
Type : AuthToken
|
|
When CS Agent logs in during regular user session we store the regular user token to restore the session after CS Agent logout. This supports in-store use case when CS Agent want's to quickly help customer and then give an option to customer to continue the process. |
| Protected _token$ |
Type : Observable<AuthToken>
|
Default value : new BehaviorSubject<AuthToken>(
{} as AuthToken
)
|
|
Inherited from
AuthStorageService
|
|
Defined in
AuthStorageService:29
|
| Protected Static Readonly nonStringifiedOAuthLibKeys |
Type : []
|
Default value : [
'PKCE_verifier',
'access_token',
'refresh_token',
'expires_at',
'access_token_stored_at',
'id_token',
'id_token_expires_at',
'id_token_stored_at',
'session_state',
'nonce',
]
|
|
Inherited from
AuthStorageService
|
|
Defined in
AuthStorageService:16
|
|
Extracted keys that are not |
import { Injectable } from '@angular/core';
import { AuthStorageService, AuthToken } from '@spartacus/core';
import { BehaviorSubject, Observable } from 'rxjs';
/**
* Indicates if auth token is for regular user or CS Agent.
*/
export enum TokenTarget {
CSAgent = 'CSAgent',
User = 'User',
}
/**
* With AsmAuthStorageService apart from storing the token we also need to store
* information for which user is the token (regular user or CS Agent).
*
* Overrides `AuthStorageService`.
*/
@Injectable({
providedIn: 'root',
})
export class AsmAuthStorageService extends AuthStorageService {
protected _tokenTarget$: Observable<TokenTarget> =
new BehaviorSubject<TokenTarget>(TokenTarget.User);
/**
* When CS Agent logs in during regular user session we store the regular
* user token to restore the session after CS Agent logout.
*
* This supports in-store use case when CS Agent want's to quickly help
* customer and then give an option to customer to continue the process.
*/
protected emulatedUserToken?: AuthToken;
/**
* Get target user for current auth token.
*
* @return observable with TokenTarget
*/
getTokenTarget(): Observable<TokenTarget> {
return this._tokenTarget$;
}
/**
* Set new token target.
*
* @param tokenTarget
*/
setTokenTarget(tokenTarget: TokenTarget): void {
(this._tokenTarget$ as BehaviorSubject<TokenTarget>).next(tokenTarget);
}
/**
* Get token for previously user session, when it was interrupted by CS agent login.
*
* @return previously logged in user token.
*/
getEmulatedUserToken(): AuthToken | undefined {
return this.emulatedUserToken;
}
/**
* Save user token on CS agent login.
*
* @param token
*/
setEmulatedUserToken(token: AuthToken): void {
this.emulatedUserToken = token;
}
/**
* Change token target to CS Agent.
*/
switchTokenTargetToCSAgent(): void {
(this._tokenTarget$ as BehaviorSubject<TokenTarget>).next(
TokenTarget.CSAgent
);
}
/**
* Change token target to user.
*/
switchTokenTargetToUser(): void {
(this._tokenTarget$ as BehaviorSubject<TokenTarget>).next(TokenTarget.User);
}
/**
* When we start emulation from the UI (not by ASM login) we can't restore user session on cs agent logout.
* Only available solution is to drop session we could restore, to avoid account hijack.
*/
clearEmulatedUserToken(): void {
this.emulatedUserToken = undefined;
}
}