> For the complete documentation index, see [llms.txt](https://metastar.gitbook.io/daopass-doc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://metastar.gitbook.io/daopass-doc/auth-widget/using.md).

# 사용법

인증 위젯 JavaScript SDK의 사용법에 대해서 알아보겠습니다.

## 📘 설치하기

클라이언트 측 HTML 파일의 `<body>` 태그 내에 아래의 스크립트를 추가합니다.

```html

<script src="https://assets.daopass.info/auth/widget.js"></script>

```

## 📘 인증 위젯 출력

인증 위젯을 출력시키는 방법을알아보겠습니다.

먼저 설정하신 인증 위젯 상세 페이지에서 API 키를 확인해주세요.

그리고 아래의 스크립트 예시를 참고하여 인증위젯을 초기화시켜주세요.

초기화가 진행되면 기기별 인증 위젯 화면이 출력됩니다.

```javascript

AuthWidget.init({
    apiKey: "api_e73ad1019060bd340358", // (required) 인증위젯API 키
    requestId: "afg3ad101asdzhlkq0", // (option) 클라이언트 서버에서 요청 유저를 확인하기 위한 고유 키
    successEventName: "SUCCESS_EVENT", // (option) 인증 성공 시 실행할  post message
    failEventName: "FAIL_EVENT" // (option) 인증 실패 시 실행할 post 이벤트 
});

```

{% hint style="success" %}
API Key는 인증 위젯 추가 시 자동으로 생성됩니다.

[준비](/daopass-doc/auth-widget/get-started.md#undefined-2)
{% endhint %}

### PC

인증용  QR코드가 출력되고 사용자가 다오패스 APP으로 스캔 시 인증이 진행됩니다.

<figure><img src="/files/11hJ3z9PF517XYJusnhf" alt=""><figcaption><p>PC화면 인증위젯</p></figcaption></figure>

### MOBILE

`다오패스 APP 내 웹페이지` 혹은 `모바일 브라우저`에서는 `인증하기 버튼`이 출력되고 사용자가 해당 버튼 클릭 시 인증이 진행됩니다.

<div align="left"><figure><img src="/files/UEqfAJxbedqOVvFJlZuk" alt=""><figcaption><p>모바일화면 인증위젯</p></figcaption></figure></div>

## 📘 인증 결과 처리

### 인증 결과 Callback

사용자가 진행한 인증 결과는 인증위젯 설정에 추가하신 `Callback URL`로 전송됩니다.

전송되는 데이터의 정보는 다음과 같습니다.

<table><thead><tr><th>이름</th><th width="242.33333333333331">타입</th><th>설명</th></tr></thead><tbody><tr><td>clientId</td><td>String</td><td>인증 키(인증내역 고유 ID)</td></tr><tr><td>status</td><td>String</td><td>인증 결과<br> - 성공: success<br> - 실패: fail</td></tr><tr><td>message</td><td>String</td><td>인증 결과 메시지</td></tr><tr><td>address</td><td>String</td><td>인증 요청 지갑주소</td></tr><tr><td>nft</td><td>Object</td><td>인증에 사용된 NFT 정보<br> - chainId: 블록체인 네트워크 ID<br> - contract: 컨트랙트 주소<br> - tokenId: NFT ID</td></tr><tr><td>userData</td><td>Object</td><td>클라이언트 측에서 설정한 커스텀데이터</td></tr></tbody></table>

{% code title="인증 성공 시 응답" %}

```json
{
    "clientId": "ce8b7a7e5c845a",
    "status": "success",
    "message": "인증이 완료되었습니다.",
    "address": "0xf5e9c6355291b421632a66dbfb5b7186df05ccfc",
    "nickname": "홍길동",
    "nft": {
        "chainId": 137,
        "contract": "0xda398051c4cd9efb19e50f710225d74397d508f3",
        "tokenId": "5"
    },
    "userData": {
        "customKey": "6fbb74d2fcd981d52f08"
    }
}
```

{% endcode %}

{% code title="인증 실패 시 응답" %}

```json
{
    "clientId": "ce8b7a7e5c845a,
    "status": "fail",
    "message": "인증에 필요한 NFT를 보유하고 있지 않습니다.",
    "address": "0xf5e9c6355291b421632a66dbfb5b7186df05ccfc"
}
```

{% endcode %}

### Callback 응답

클라이언트 서버에서는 해당 URL이 호출되었을 때 응답 JSON 데이터를 통해 사용자에게 최종적으로 인증 결과를 전달할 수 있습니다.

<table><thead><tr><th>이름</th><th>타입</th><th>설명</th><th><select><option value="e57d3ebcb3654833a641a42142f229ed" label="필수" color="blue"></option><option value="737934640a364194a22c8b601a01f0f3" label="옵션" color="blue"></option></select></th></tr></thead><tbody><tr><td>code</td><td>Integer</td><td>상태 코드<br> - 정상: 100<br> - 그 외(ex: 500)</td><td><span data-option="e57d3ebcb3654833a641a42142f229ed">필수</span></td></tr><tr><td>message</td><td>String</td><td>결과 메시지</td><td><span data-option="e57d3ebcb3654833a641a42142f229ed">필수</span></td></tr><tr><td>secret_key</td><td>String</td><td>인증위젯 설정정보에 배정된 비밀 키</td><td><span data-option="e57d3ebcb3654833a641a42142f229ed">필수</span></td></tr><tr><td>custom_data</td><td>Object</td><td>사용자 화면에 인증 데이터와 함께 전달할 추가 데이터</td><td><span data-option="737934640a364194a22c8b601a01f0f3">옵션</span></td></tr></tbody></table>

{% code title="인증 성공 처리 데이터 예시" %}

```json
{
    "code": 100,
    "message": "OK",
    "secret_key": "secret_ab4315cd157b6100bbda",
    "custom_data": {
        "redirect_url": "https://partner.daopass.net/api/login"
    }
}
```

{% endcode %}

{% code title="인증 실패 처리 데이터 예시" %}

```json
{
    "code": 500,
    "message": "NFT에 해당하는 유저 정보가 존재하지 않습니다.",
    "secret_key": "secret_ab4315cd157b6100bbda"
}
```

{% endcode %}
