# 概览

开发者如果不需要保利威 Saas 的观看条件验证功能时，可通过保利威 Api 接口生成观众登录令牌（以下统称 **登录令牌**），令牌验证通过后即可绕过观看条件限制进入直播观看页，详细用法可见以下文档：

## 一、处理流程

### 1.1 步骤1：获取登录令牌

通过保利威 Api 接口获取观众登录令牌，接口文档可见：[生成登录令牌](https://git.polyv.net/help-center/document-center/-/blob/master/live/js/new_sdk/live_watch_sdk/articles/verify/create-login-token/README.md)。

> 由于该接口涉及 appSecret 进行参数签名，建议该步骤由服务端生成。

### 1.2 步骤2：验证登录令牌

通过步骤1 生成登录令牌后，通过验证接口验证登录令牌，验证通过后从接口响应头中获取 `x-auth-token`，该 token 为观看页 SDK 使用的验证令牌，接口文档可见：[验证登录令牌](https://git.polyv.net/help-center/document-center/-/blob/master/live/js/new_sdk/live_watch_sdk/articles/verify/verify-login-token/README.md)。

### 1.3 步骤3：设置 x-auth-token

通过步骤2 获取 `x-auth-token` 后，可调用观看页 SDK 核心实例的 `setXAuthToken` 方法设置令牌。

### 1.4 步骤4：安装核心实例

通过步骤3 设置后即可根据正常流程安装核心实例，注意关于登录令牌的流程仅在首次安装前需要，二次安装则不再需要该流程。

## 二、示例代码

以下为 js 方式的流程示例代码：

```js
import { send } from '@just4/ajax/ajax';
import md5 from 'md5';
import { createWatchCore } from '@polv/live-watch-sdk';

/**
 * 生成签名
 * @param {Object} data 请求参数
 * @param {String} secret 签名密钥
 * @returns 签名串
 */
function getSign(data, secret) {
  let text = '';
  const keys = Object.keys(data).sort();

  for (const key of keys) {
    text += `${key}${data[key]}`;
  }
  const sign = md5(secret + text + secret);
  return sign.toUpperCase();
}

async function example() {
  const channelId = '频道号';

  // 创建观看页 SDK 核心实例
  const watchCore = createWatchCore({
    channelId,
  });

  // 请求数据
  const reqData = {
    appId: '应用 ID，从管理后台获取',
    timestamp: Date.now(),
    channelId,
    viewerId: '观众 id',
    nickname: '观众昵称',
  };
  // 应用密钥，从管理后台获取，建议获取登录令牌流程在服务端中进行，避免将应用密钥直接暴露在 js 中
  const appSecret = 'xxxxx';
  // 生成签名
  const sign = getSign(reqData, appSecret);
  reqData.sign = sign;

  // 步骤1：通过 ajax 获取登录令牌
  const response = await send('//api.polyv.net/live/v3/channel/watch/get-api-token', {
    method: 'post',
    data: reqData,
  });
  const result = response.data;
  const loginToken = result.data.token;

  // 步骤2：验证登录令牌
  const res = await send('//watch-api.polyv.cn/v3/common/auth/api-auth/viewer/set-info', {
    method: 'post',
    data: {
      channelId,
      token: loginToken,
    },
  });
  // 从响应头中获取 x-auth-token
  const xAuthToken = res.xhr.getResponseHeader('x-auth-token');
  if (!xAuthToken) {
    throw new Error('获取失败，响应头中没有 x-auth-token')
  }

  // 步骤3：设置 x-auth-token
  watchCore.setXAuthToken(xAuthToken);

  // 步骤4：安装核心实例
  await watchCore.setup();
}
```

## 三、时序图

关于登录令牌的流程图如下：

![](https://git.polyv.net/help-center/document-center/-/blob/master/live/js/new_sdk/live_watch_sdk/assets/login-token.png)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://polyv.gitbook.io/document/docs/live/js/new-sdk/live-watch-sdk/articles/verify/overview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
