> For the complete documentation index, see [llms.txt](https://docs.wepin.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.wepin.io/widget-integration/web-javascript-sdk/login-library/methods.md).

# 메서드

Wepin Login Library  초기화 이후 사용할 수 있습니다.

## loginWithOauthProvider

```javascript
await wepinLogin.loginWithOauthProvider(params)
```

새 창이 열리고 Wepin Firebase에 로그인합니다. 로그인에 성공하면 Firebase 로그인 정보를 반환합니다. `required/register_email`오류 메시지를 반환하면 `sendVerifyEmail` 메서드를 호출해야 합니다.

### **Parameters**

* `params` \<object>
  * `provider` <'google'|'naver'|'discord'|'apple'|'line'|'facebook'> - Provider for Firebase login
  * `withLogout` \<boolean> **optional**&#x20;
    * true : 이미 로그인 되어 있는 경우, 로그아웃을 하지 않음
    * false  : 이미 로그인 되어 있는 경우, 로그아웃을 하고 다시 로그인 함

### **Return value**

* `Promise` \<LoginResult | LoginErrorResult>
  * \<LoginResult>
    * `provider` <'google'|'naver'|'discord'|'apple'|'line'|'facebook'>
    * `token` \<object>
      * `idToken` \<string> \
        wepin firebase idToken
      * `refreshToken` \
        wepin firebase refreshToken
  * \<LoginErrorResult>
    * `error` \<string> \
      error message
    * `idToken` \<string> ***optional***\
      id token value
    * `accessToken` \<string> ***optional*** \
      accessToken token value
    * `provider` <'google'|'naver'|'discord'|'apple'|'line'|'facebook'> ***optional*** \
      Provider that issued the access token

### **Exception**

* `Invalid provider`:  파라미터인 프로바이더값이 잘못된 경우
* `User canceled` : 로그인 진행중에 사용자가 창을 닫은 경우
* `Internal error` : 나머지 예외 상황이 발생한 경우

### **Example**

```javascript
const user = await wepinLogin.loginWithOauthProvider(true)
```

* response
  * LoginResult

    ```json
    {
      "provider": "google",
      "token": {
          "idToken": "ab2231df....ad0f3291",
          "refreshToken": "eyJHGciO....adQssw5c",
      }
    }
    ```
  * LoginErrorResult

    ```json
    {
      "error": "required/register_email",
      "provider": "naver",
      "accessToken": "eyJHGciO....adQssw5c",
    }
    ```

## &#x20;signUpWithEmailAndPassWord

```javascript
await wepinLogin.signUpWithEmailAndPassword(email, password, openWepinWallet?)
```

이메일과 비밀번호로 Wepin Firebase에 회원가입을 합니다. 가입되지 않은 사용자의 경우 검증 이메일이 전송되며, `auth/email-verified`오류가 발생합니다. 이미 가입된 사용자의 경우, `auth/existed-email` 오류가 발생하며 [loginWithEmailAndPassword](/widget-integration/web-javascript-sdk/login-library/methods.md#loginwithemailandpassword)를 호출하여 로그인 프로세스를 진행합니다. 로그인에 성공하면 Firebase 로그인 정보를 반환합니다.

### **Parameters**

* `email` \<string>\
  사용자 이메일 주소
* `password` \<string>

  사용자 이메일 비밀번호
* `openWepinWallet` \<boolean> **optional** \
  Wepin Wallet의 인증 이메일 전송 페이지가 보이게 할지 여부

### **Return Value**

* `Promise`\<LoginResult>
  * `provider` <'email'>
  * `token` \<object>
    * `idToken` \<string>\
      wepin firebase idToken
    * `refreshToken` \
      wepin firebase refreshToken

### **Exception**

* `auth/email-verified`: 회원가입을 위해 인증 이메일이 발송되었으며, 이메일 인증이 필요합니다.
* `auth/existed-email` : 이미 회원가입이 되어 있는 경우
* `fail/send-email` : 인증 이메일 발송에 실패한 경우
* `fail/email-verified` : 이메일 인증에 실패한 경우

### **Example**

```javascript
const user = await wepinLogin.signUpWithEmailAndPassword('abc@defg.com', 'abcdef123&')
```

* response

<pre class="language-json"><code class="lang-json"><strong>    {
</strong>        "provider": "email",
        "token": {
            "idToken": "ab2231df....ad0f3291",
            "refreshToken": "eyJHGciO....adQssw5c",
        }
    }
</code></pre>

## loginWithEmailAndPassWord

```javascript
await wepinLogin.loginWithEmailAndPassword(email, password)
```

이메일과 비밀번호로 Wepin Firebase에 로그인합니다. 로그인에 성공하면 Firebase 로그인 정보를 반환합니다.

### **Parameters**

* `email` \<string>\
  사용자 이메일 주소
* `password` \<string>

  사용자 이메일 비밀번호

### **Return Value**

* `Promise`\<LoginResult>
  * `provider` <'email'>
  * `token` \<object>
    * `idToken` \<string>\
      wepin firebase idToken
    * `refreshToken` \
      wepin firebase refreshToken

### **Example**

```javascript
const user = await wepinLogin.loginWithEmailAndPassword('abc@defg.com', 'abcdef123&')
```

* response

```json
    {
        "provider": "email",
        "token": {
            "idToken": "ab2231df....ad0f3291",
            "refreshToken": "eyJHGciO....adQssw5c",
        }
    }
```

## loginWithIdToken

```javascript
await wepinLogin.loginWithIdToken(params)
```

외부 IdToken으로 Wepin Firebase에 로그인합니다. 성공적으로 로그인하면 Firebase 로그인 정보를 반환합니다. `required/register_email`오류 메세지를 반환하면 `sendVerifyEmail` 메서드를 호출해야 합니다.

### **Parameters**

* `params` \<object>

  * `token` \<string> \
    로그인에 사용될 외부 IdToken 값입니다.
  * `sign` \<string> ***optional***

    첫 번째 매개변수로 제공된 `token`의 서명 값입니다. ([Signature Generation Methods](https://github.com/WepinWallet/wepin-widget-js-sdk/blob/main/doc/SignatureGenerationMethods.md))

  <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p><code>@wepin/login-js</code> 버전 <mark style="color:red;"><strong>0.0.29</strong></mark> 부터 <code>sign</code> 값은 옵셔널로 변경되었습니다.<br><br><a href="https://workspace.wepin.io/">Wepin Workspace</a>에서 인증 키를 제거하면, 서명(<strong><code>sign</code></strong>)  값을 사용하지 않을 수 있습니다.</p><p>(<a href="https://workspace.wepin.io/">Wepin Workspace</a> > Development Tools menu > Login tab > Auth Key> Delete)</p><blockquote><p><mark style="background-color:yellow;">인증 키를 이전에 생성한 경우에만 인증 키 메뉴가 표시됩니다.</mark></p></blockquote></div>

### **Return Value**

* `Promise`\<LoginResult | LoginErrorResult>
  * \<LoginResult>
    * `provider` <'external\_token'>
    * `token` \<object>
      * `idToken` \<string> \
        wepin firebase idToken
      * `refreshToken` \
        wepin firebase refreshToken
  * \<LoginErrorResult>
    * `error` \<string>\
      error message
    * `idToken` \<string> ***optional*** \
      id token value

### **Example**

```javascript
const user = await wepinLogin.loginWithIdToken({
    token:'eyJHGciO....adQssw5c', 
    sign:'9753d4dc...c63466b9'
})
```

* response
  * LoginResult

    ```json
    {
      "provider": "external_token",
      "token": {
          "idToken": "ab2231df....ad0f3291",
          "refreshToken": "eyJHGciO....adQssw5c",
      }
    }
    ```
  * LoginErrorResult

    ```json
    {
      "error": "required/register_email",
      "idToken": "eyJHGciO....adQssw5c",
    }
    ```

## loginWithAccessToken

```javascript
await wepinLogin.loginWithAccessToken(params)
```

외부 Access Token으로 Wepin Firebase에 로그인합니다. 성공적으로 로그인하면 Firebase 로그인 정보를 반환합니다. `required/register_email`오류 메세지를 반환하면 `sendVerifyEmail` 메서드를 호출해야 합니다.

### **Parameters**

* `params` \<object>

  * `provider` <'naver'|'discord'|'facebook'>\
    Access Token을 발급 받은 로그인 Provider
  * `token` \<string> \
    로그인에 사용될 외부 Access Token값입니다.
  * `sign` \<string> ***optional***

    두 번째 매개변수로 제공된 `token`의 서명 값입니다. ([Signature Generation Methods](https://github.com/WepinWallet/wepin-widget-js-sdk/blob/main/doc/SignatureGenerationMethods.md))

  <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p><code>@wepin/login-js</code> 버전 <mark style="color:red;"><strong>0.0.29</strong></mark> 부터 <code>sign</code> 값은 옵셔널로 변경되었습니다.<br><a href="https://workspace.wepin.io/">Wepin Workspace</a>에서 인증 키를 제거하면, 서명(<strong><code>sign</code></strong>)  값을 사용하지 않을 수 있습니다.</p><p>(<a href="https://workspace.wepin.io/">Wepin Workspace</a> > Development Tools menu > Login tab > Auth Key> Delete)</p><blockquote><p><mark style="background-color:yellow;">인증 키를 이전에 생성한 경우에만 인증 키 메뉴가 표시됩니다.</mark></p></blockquote></div>

### **Return Value**

* `Promise`\<LoginResult | LoginErrorResult>
  * \<LoginResult>
    * `provider` <'external\_token'>
    * `token` \<object>
      * `idToken` \<string>  \
        wepin firebase idToken
      * `refreshToken` \
        &#x20;wepin firebase refreshToken
  * \<LoginErrorResult>
    * `error` \<string> \
      error message
    * `accessToken` \<string> ***optional***\
      accessToken token value
    * `provider` \<string> ***optional*** \
      Provider that issued the access token

### **Example**

```javascript
const user = await wepinLogin.loginWithAccessToken({
    provider: 'naver', 
    token:'eyJHGciO....adQssw5c', 
    sign:'9753d4dc...c63466b9'
})
```

* response
  * LoginResult

    ```json
    {
      "provider": "external_token",
      "token": {
          "idToken": "ab2231df....ad0f3291",
          "refreshToken": "eyJHGciO....adQssw5c",
      }
    }
    ```
  * LoginErrorResult

    ```json
    {
      "error": "required/register_email",
      "provider": "naver",
      "accessToken": "eyJHGciO....adQssw5c",
    }
    ```

## getSignForLogin

```javascript
import {getSignForLogin} from '@wepin/login-js'
const result = getSignForLogin(privKey, message);
```

발행자를 검증하기 위한 서명을 생성합니다. 주로 IdToken 및 Access Token과 같은 로그인 관련 정보의 서명을 생성하는 데 사용됩니다.

### **Parameters**

* `privKey` \<string> \
  서명 생성에 사용되는 인증 키입니다.
* `message` \<string> \
  서명될 메세지 또는 페이로드입니다.

### **Return Value**

* \<string>

  서명값

{% hint style="danger" %}
인증 키(privKey)는 안전하게 보관해야 하며 외부에 노출되어서는 안 됩니다. 민감한 정보의 보안과 보호를 강화하기 위해 getSignForLogin() 메서드는 프론트 엔드가 아닌 백엔드에서 실행하는것을 권장합니다.
{% endhint %}

### **Example**

```javascript
const privKey = '0400112233445566778899001122334455667788990011223344556677889900'
const idToken = 'idtokenabcdef'
const sign = getSignForLogin(privKey, idToken)

const res = await wepinLogin.loginWithIdToken({
    token: idToken, 
    sign
})
```

## getRefreshFirebaseToken

```javascript
import {getRefreshFirebaseToken} from '@wepin/login-js'
const result = getSignForLogin(privKey, message);
```

Wepin에서 현재 Firebase 토큰의 정보를 가져옵니다.

### **Parameters**

* `prevFBToken` \<LoginResult> ***optional***
  * `provider` <'google'|'naver'|'discord'|'apple'|'line'|'facebook'>
  * `token` \<object>
    * `idToken` \<string> \
      wepin firebase idToken
    * `refreshToken` \
      wepin firebase refreshToken

{% hint style="warning" %}
`@wepin/login-js` version <mark style="color:red;">**0.0.33**</mark>부터`prevFBToken` 이 parameter 에 추가되었습니다.
{% endhint %}

### **Return Value**

* `Promise` \<LoginResult>
  * \<LoginResult>
    * `provider` <'google'|'naver'|'discord'|'apple'|'line'|'facebook'>
    * `token` \<object>
      * `idToken` \<string> \
        wepin firebase idToken
      * `refreshToken` \
        wepin firebase refreshToken

### **Example**

```javascript
// Without parameter (legacy way)
const result = await wepinLogin.getRefreshFirebaseToken()

// With prevFBToken parameter (since v0.0.33)
const prevToken = {
    provider: 'google',
    token: {
        idToken: 'previous_id_token',
        refreshToken: 'previous_refresh_token'
    }
}
const result = await wepinLogin.getRefreshFirebaseToken(prevToken)
```

## sendVerifyEmail

<pre class="language-javascript"><code class="lang-javascript"><strong>await wepinLogin.sendVerifyEmail(params)
</strong></code></pre>

sendVerifyEmail 메서드는 이메일 등록 및 이메일 인증 요청을 수행합니다. required/register\_email 오류가 발생한 경우, 이메일을 등록하고 인증을 요청해야 합니다. 인증이 완료되면 `loginWithAccessToken` 또는 `loginWithIdToken` 메서드를 사용하여 처음 로그인 시 사용했던 AccessToken 또는 IdToken으로 다시 로그인합니다.

### **Supported Version**

* 버전 <mark style="color:orange;">**`0.0.18`**</mark> 이상에서 지원

### **Parameters**

* `params` \<ISendVerifyEmailParams>
  * `email` \<string>\
    등록하고 인증할 이메일 주소
  * `provider` \<string> \
    Firebase 로그인 프로바이더. 소문자로 ‘google’, ‘naver’, ‘discord’, ‘apple’, ‘facebook’, ‘line’ 등의 지원되는 프로바이더 중 하나여야 합니다. 지원되는 로그인 프로바이더의전체 목록은 [Wepin Social Login Auth Provider](/login/social-login-auth-provider.md) 문서를 참조하세요.
  * `idToken` \<string> \
    로그인에 사용될 id token 값
  * `accessToken` \<string> \
    로그인에 사용될 access token 값

### **Return Value**

* Promise\<boolean>

### **Example**

```javascript
const res = await wepinLogin.sendVerifyEmail({
    email:'test@abcde.com'
    provider: 'naver', 
    accessToken:'eyJHGciO....adQssw5c', 
})
```

## loginWepin

<pre class="language-javascript"><code class="lang-javascript"><strong>await wepinLogin.loginWepin({provider, token})
</strong></code></pre>

지정된 Login Provider와 Token을 사용하여 사용자를 위핀에 로그인 합니다.

### **Parameters**

이  메서드의 파라미터는 해당 모듈내의 [loginWithOauthProvider()](#loginwithoauthprovider), [loginWithEmailAndPassword()](#loginwithemailandpassword), [loginWithIdToken()](#loginwithidtoken), 그리고 [loginWithAccessToken()](#loginwithaccesstoken) 메서드들로부터의 반환 값들을 활용해야 합니다.

* `provider` <'google'|'apple'|'naver'|'discord'|'line'|'facebook'|'external\_token'|'email'>\
  Login Provider
* `token` \<object>
  * `idToken` \<string>\
    wepin firebase idToken
  * `refreshToken` \
    wepin firebase refreshToken

### **Return Value**

* `Promise`\<IWepinUser>
  * `status` <'success'|'fail'>\
    로그인 결괏값
  * `userInfo` \<object> **optional**\
    로그인된 사용자의 정보
    * userId \<string>\
      사용자의 Wepin ID
    * email \<string>\
      사용자의 email 주소
    * provider<'google'|'apple'|'naver'|'discord'|'email'|'external\_token'>\
      로그인한 Provider
    * use2FA \<boolean>\
      사용자의 2FA 설정 여부
  * `userStatus` \<object>\
    로그인된 사용자의 상태정보
    * `loginStats`: <'complete' | 'pinRequired' | 'registerRequired'>\
      'complete'가 아닌 경우, 위핀에 회원가입(등록)을 해야됩니다.
    * `pinRequired` \<boolean> **optional**\
      사용자 PIN 번호의 필요 여부
  * `token` \<object>\
    사용자의 wepin token
    * `accessToken` \<string>\
      Wepin Access Token
    * `refreshToken` \
      Wepin Refresh Token

### **Example**

```javascript
const wepinLogin = WepinLogin({ appId: 'appId', appKey: 'appKey' })
const res = await wepinLogin.loginWithOauthProvider({ provider: 'google' })

const userInfo = await wepinLogin.loginWepin(res)
const userStatus = userInfo.userStatus
if(userStatus.loginStatus === 'pinRequired'||userStatus.loginStatus === 'registerRequired') {
    // wepin register
}
```

* response

```json
{
    "status": "success",
    "userInfo": {
      "userId": "120349034824234234",
      "email": "abc@gmail.com",
      "provider": "google",
      "use2FA": true,
    },
    "walletId": "abcdsfsf123",
    "userStatus": {
        "loginRequired": "completed",
        "pinRequired": false,
    },
    "token": {
        "accessToken": "",
        "refreshToken": "",
    }
}
```

## logout

```javascript
await wepinLogin.logout()
```

위핀 사용자를 로그아웃 합니다.&#x20;

### **Parameters**

* \<void>

### **Return Value**

* `Promise` \<boolean>

  성공인 경우 true

### **Exception**

* `Wepin login module Not initialized`: Wepin Login Library가 초기화 되지 않은 경우
* `Already logout` : 사용자가 이미 로그아웃된 상태인 경우우

### **Example**

```javascript
const result = await wepinLogin.logout()
```

## finalize

```javascript
wepinLogin.finalize()
```

Wepin Login Library 사용을 종료합니다.

### **Parameters**

* \<void>

### **Return Value**

* \<void>

### **Example**

```javascript
wepinLogin.finalize()
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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://docs.wepin.io/widget-integration/web-javascript-sdk/login-library/methods.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.
