open-index/open-npm huggingface dataset:
npm package: @hiforce/auth-sdk
Description: 基于OIDC协议的与用户中心对接的前端sdk。
Latest version: 1.2.0

## auth-sdk

基于OIDC协议的与用户中心对接的前端sdk。

### 功能

- [x] 强制、非强制认证
- [x] 自动刷新token
- [x] 认证失败自动跳登录
- [x] 退登
- [x] 主动到登录、注册（系统可以免登访问的场景）

### 接入

### 安装依赖

```shell
yarn add @hiforce/auth-sdk
```

```shell
npm i @hiforce/auth-sdk
```

#### 项目配置

***创建一个应用全局认证client***

```ts
// 必填参数
export const authClient = new AuthenticationClient({
  client_id: 'AlarmCenter',
  client_secret: '123456',
  auth_center_host: 'http://auth_center_host',
});
```

***属性说明***

| 属性key              | 说明                                                                                | 必填    |
|--------------------|-----------------------------------------------------------------------------------|-------|
| `client_id`        | idaas里的id,建应用的时候会生成。                                                              | true  |
| `client_secret`    | idaas里的secret,建应用的时候会生成。                                                          | true  |
| `auth_center_host` | 使用哪个环境的idaas. 注意是公网地址, e.g. http://idaas-onlinetest.quadtalent.com                | true  |
| `redirect_uri`     | 认证时跳转的地址，如果不填，则认证成功后回到当前页。如果填了，认证成功后始终回到改地址，一般用于每次登录都回到首页（window.location.origin) | false |
| `appId`            | 当前应用的id,用于在idaas登录页展示定制化的登录页。（前提是该应用在idaas应该定制了登录页)                               | false |

***认证***

在需要认证的地方调用 `doAuthorization` 方法。一般情况下认证失败，sdk会直接将页面重定向到idaas登录页，如果你有不登录也能访问系统的需求，那么可以给这个方法传true，代表跳过认证失败的结果。

```ts
// 这是一个异步的过程，
const authResult:boolean = await client.doAuthorization(skipWhenInvalid);
```


最佳实践

认证需要在应用入口处，认证未结束，不要渲染UI

```typescript
  const App = () => {
    const [authing, setAuthing] = useState<boolean>(true);
    useEffect(() => {
      client.doAuthorization().then((authResult:boolean)=>{
        // 如果你的应用是必须登录才能访问的，那么只有认证成功才渲染UI，sdk会自动调到登录页
        if(authResult){
          setAuthing(false)
        }

      })
    }, [])
    
    if(authing){
      return null;
    }
    return 'hello page';
  }
```

***获取用户信息***

认证成功后，可直接通过 `getCurrentUser` 获取用户信息，推荐将用户信息放到状态管理里

```typescript
  import { getCurrentUser} from '@hiforce/auth-sdk';
  // 认证
  await authClient.doAuthorization();
  // 获取用户信息
  const user = getCurrentUser();
  // 放到redux里
  dispatch(setUserInfo(user));
```

***用户信息变化事件***
```typescript
       authClient.onAuthInfoChange = (userInfo) => {
          //
    };

authClient.onAuthFail = ()=>{
  
}
```

#### 认证流程

![认证流程](./docs/auth-flow.jpg)