ohayolibs
Version:
Ohayo is a set of essential modules for ohayojp.
84 lines (69 loc) • 2.25 kB
text/typescript
import { InjectionToken } from '@angular/core';
import { OhayoAuthConfig } from '@ohayo/util';
import { Observable } from 'rxjs';
import { DA_SERVICE_TOKEN_FACTORY } from './token.service';
export const DA_SERVICE_TOKEN = new InjectionToken<ITokenService>('DA_SERVICE_TOKEN', {
providedIn: 'root',
factory: DA_SERVICE_TOKEN_FACTORY,
});
// tslint:disable-next-line: interface-name
export interface ITokenModel {
[key: string]: any;
token: string | null | undefined;
/**
* 过期时间,单位:ms
* - 不管Simple、JWT模式都必须指定
*/
expired?: number;
}
export interface AuthReferrer {
url?: string | null | undefined;
}
// tslint:disable-next-line: interface-name
export interface ITokenService {
/**
* 授权失败后跳转路由路径(支持外部链接地址),通过设置[全局配置](https://ohayojp.com/docs/global-config)来改变
*/
readonly login_url: string | undefined;
/**
* 当前请求页面的来源页面的地址
*/
readonly referrer?: AuthReferrer;
readonly options: OhayoAuthConfig;
/**
* 订阅刷新,订阅时会自动产生一个定时器,每隔一段时间进行一些校验
* - **注意** 会多次触发,请务必做好业务判断
*/
readonly refresh: Observable<ITokenModel>;
/**
* 设置 Token 信息,当用户 Token 发生变动时都需要调用此方法重新刷新
* - 如果需要监听过期,需要传递 `expired` 值
*/
set(data: ITokenModel | null): boolean;
/**
* 获取Token,形式包括:
* - `get()` 获取 Simple Token
* - `get<JWTTokenModel>(JWTTokenModel)` 获取 JWT Token
*/
get(type?: any): ITokenModel | null;
/**
* 获取Token,形式包括:
* - `get()` 获取 Simple Token
* - `get<JWTTokenModel>(JWTTokenModel)` 获取 JWT Token
*/
get<T extends ITokenModel>(type?: any): T;
/**
* 清除 Token 信息,当用户退出登录时调用。
* ```
* // 清除所有 Token 信息
* tokenService.clear();
* // 只清除 token 字段
* tokenService.clear({ onlyToken: true });
* ```
*/
clear(options?: { onlyToken: boolean }): void;
/**
* 订阅 Token 对象变更通知
*/
change(): Observable<ITokenModel | null>;
}