Skip to content

๐Ÿ—๏ธ React์˜ react-google-recaptcha ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“  ReCaptcha V2, V3 ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.

Notifications You must be signed in to change notification settings

light9639/React-ReCaptcha-Example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

6 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ—๏ธ React์˜ react-google-recaptcha ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“  ReCaptcha V2, V3 ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.

Light Dark

โœจ ๐Ÿ—๏ธ React์˜ react-google-recaptcha ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“  ReCaptcha V2, V3 ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. โœจ

๐ŸŽ‰ React ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

  • React ์ƒ์„ฑ
npm create-react-app my-app
# or
yarn create react-app my-app
  • vite๋ฅผ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด
npm create vite@latest
# or
yarn create vite
  • ํ„ฐ๋ฏธ๋„์—์„œ ์‹คํ–‰ ํ›„ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ๋งŒ๋“  ํ›„ React ์„ ํƒ, Typescirpt-SWC ์„ ํƒํ•˜๋ฉด ์ƒ์„ฑ ์™„๋ฃŒ.

๐Ÿš  'react-google-recaptcha-v3', 'react-google-recaptcha' ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

  • ReCaptcha๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ๋žŒ์ธ์ง€ ๋กœ๋ด‡์ธ์ง€๋ฅผ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ReCaptcha๋ฅผ React์—์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” react-google-recaptcha ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ด์„œ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿผ, ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•œ๋‹ค.
$ npm install react-google-recaptcha-v3 react-google-recaptcha
# or
$ yarn add react-google-recaptcha-v3 react-google-recaptcha

โš™๏ธ .env ํŒŒ์ผ ์„ธํŒ…

โšก .env

  • .env ํŒŒ์ผ์—๋Š” ReCaptcha ์‚ฌ์ดํŠธ์—์„œ ๋ฐœ๊ธ‰๋ฐ›์€ 2๊ฐ€์ง€ key๊ฐ’์„ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค.
  • ์ด์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค.
VITE_V2_KEY={ReCaptcha 2๋ฒ„์ „์˜ key ๊ฐ’}
VITE_V3_KEY={ReCaptcha 3๋ฒ„์ „์˜ key ๊ฐ’}

โœ’๏ธ App.tsx ์ˆ˜์ • ๋ฐ ์ž‘์„ฑ

โšก App.tsx

  • Captcha2.tsx, Captcha3.tsx๋ฅผ importํ•˜์—ฌ div.card ์•ˆ์— ์œ„์น˜์‹œํ‚จ๋‹ค.
import { useState } from 'react'
import reactLogo from './assets/react.svg'
import ReCaptcha from './assets/ReCaptcha.png'
import './App.css'
import Captcha2 from '@components/Captcha2'
import Captcha3 from '@components/Captcha3'

export default function App(): JSX.Element {
  return (
    <div className="App">
      <div>
        <a href="https://www.npmjs.com/package/react-google-recaptcha" target="_blank">
          <img src={ReCaptcha} className="logo" alt="ReCaptcha" />
        </a>
        <a href="https://reactjs.org" target="_blank">
          <img src={reactLogo} className="logo react" alt="React logo" />
        </a>
      </div>
      <h1>React-ReCaptcha-Pages</h1>
      <div className="card">
        <Captcha2 />
        <Captcha3 />
      </div>
      <p className="read-the-docs">
        Click on the React and ReCaptcha logos to learn more
      </p>
    </div>
  )
}

๐Ÿ“ components ํŒŒ์ผ ์† Captcha2.tsx, Captcha3.tsx ์ˆ˜์ • ๋ฐ ์ž‘์„ฑ

โšก Captcha2.tsx

  • ReCaptcha์˜ 2๋ฒ„์ ผ ์ค‘ ์ด๋ฏธ์ง€ ์„ ํƒ ํ˜•์‹์„ ๊ณ ๋ฅธ ํ›„ import.meta.env.VITE_V2_KEY๋กœ .env์˜ key ๊ฐ’์„ ํ†ตํ•ด ์ž‘๋™์‹œํ‚จ๋‹ค.
import React from "react";
import ReCAPTCHA from "react-google-recaptcha";

const Captcha2 = () => {
    const recaptchaRef = React.useRef() as React.MutableRefObject<HTMLFormElement>;

    const onSubmitWithReCAPTCHA = async () => {
        const token = await recaptchaRef.current.executeAsync();
    }

    return (
        <form onSubmit={onSubmitWithReCAPTCHA}>
            <ReCAPTCHA
                ref={recaptchaRef}
                sitekey={import.meta.env.VITE_V2_KEY}
            />
        </form>
    )

}

export default Captcha2

โšก Captcha3.tsx

  • ReCaptcha์˜ 3๋ฒ„์ ผ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž๋™์œผ๋กœ ์‚ฌ๋žŒ์ธ์ง€ ๊ธฐ๊ณ„์ธ์ง€๋ฅผ ํŒ๋‹จํ•ด์ค€๋‹ค.
  • ์œ„์—์„œ ์ž‘์„ฑํ•œ ๋‚ด์šฉ๊ณผ ๋™์ผํ•˜๊ฒŒ import.meta.env.VITE_V3_KEY๋Š” .env์˜ key ๊ฐ’์„ ํ†ตํ•ด ์ž‘๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
import React from "react";
import ReCAPTCHA from "react-google-recaptcha";

const Captcha3 = () => {
    const recaptchaRef = React.useRef() as React.MutableRefObject<HTMLFormElement>;

    const onSubmitWithReCAPTCHA = async () => {
        const token = await recaptchaRef.current.executeAsync();
    }

    return (
        <form onSubmit={onSubmitWithReCAPTCHA}>
            <ReCAPTCHA
                ref={recaptchaRef}
                size="invisible"
                sitekey={import.meta.env.VITE_V3_KEY}
            />
        </form>
    )

}

export default Captcha3

๐Ÿ“Ž ์ถœ์ฒ˜

About

๐Ÿ—๏ธ React์˜ react-google-recaptcha ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“  ReCaptcha V2, V3 ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published