Computer >> 컴퓨터 >  >> 소프트웨어 >> 메일

이메일 검증 서비스로 Flask 사용자 인증 강화

이메일 검증 서비스로 Flask 사용자 인증 강화

오늘날의 디지털 세계에서 온라인 보안은 정말 중요하며, 사용자 인증은 그 핵심 요소입니다.

이메일 기반 인증은 사용자 등록 및 로그인에 가장 널리 사용되고 널리 사용되는 방법 중 하나입니다. 그러나 사용자가 등록 중에 가짜 또는 유효하지 않은 이메일 주소를 입력할 수 있으므로 항상 신뢰할 수 있는 것은 아닙니다. 이는 보안 위험과 사기로 이어질 수 있습니다. 이것이 바로 이메일 확인 서비스가 유용한 곳입니다.

이 튜토리얼에서는 이메일 검증 서비스를 사용하여 사용자 등록 중에 연락처 정보를 검증하여 이메일 검증 프로세스를 자동화하는 데 도움을 줍니다.

API는 이메일 주소의 구문, 도메인, 메일함을 확인하고 일회용 이메일과 위험한 이메일도 감지할 수 있습니다.

이 API를 애플리케이션과 통합하면 사용자 등록에 유효하고 실제 이메일 주소만 사용되도록 보장할 수 있어 애플리케이션의 보안이 강화됩니다.

전제조건

튜토리얼을 시작하기 전에 다음 요구 사항을 충족하는지 확인하세요:

  • Python 실무 지식
  • 시스템에 Python 3.8 이상이 설치되어 있음
  • Flask, Flask 청사진 및 요청에 대한 기본 지식

가상 환경 설정 방법

코딩을 시작하기 전에 필요한 도구와 라이브러리가 모두 설치되어 있는지 확인해야 합니다. 깨끗하고 격리된 환경을 보장하기 위해 venv를 사용하여 가상 환경을 생성합니다. .

프로젝트 디렉토리를 생성하고 터미널에서 해당 디렉토리로 이동하세요:

mkdir email-validation
cd email-validation

env이라는 가상 환경을 만듭니다. 다음 명령을 사용합니다:

python -m venv env

이제 Python이 사전 설치된 venv와 함께 제공됩니다. 가상 환경을 만들기 위한 라이브러리입니다.

다음과 같이 가상 환경을 활성화하세요:

source env/bin/activate

참고:Windows를 사용하는 경우 source env/Scripts/activate을 사용해야 합니다. 환경을 활성화합니다.

(env)가 표시되어야 합니다. 터미널 프롬프트에 가상 환경이 활성화되었음을 나타냅니다.

이메일 검증은 사용자 인증이 필요한 모든 웹 애플리케이션에 필수적인 프로세스이며 이를 수행하는 방법은 다양합니다.

한 가지 방법은 emailvalidation.io와 같은 이메일 검증 서비스를 사용하는 것입니다. 이 API를 사용하면 개발자는 구문이 올바른지, 도메인이 존재하는지, 편지함이 메시지를 받을 수 있는지 여부를 확인하여 이메일 주소를 확인할 수 있습니다.

API는 다양한 요구에 맞는 다양한 가격 계획을 제공합니다. 무료 플랜을 통해 개발자는 최대 100개의 이메일을 검증할 수 있으며 이는 테스트 목적에 충분합니다. 유료 요금제는 월 9.99달러부터 시작하며 더 많은 요청, 더 많은 기능 및 더 빠른 응답 시간을 제공합니다.

이 섹션에서는 API의 엔드포인트에 GET 요청을 보내고 검증할 이메일 주소를 매개변수로 전달하는 Python 함수를 작성합니다.

API 요청을 인증하려면 요청과 함께 API 키도 전달해야 합니다. 계속하기 전에 emailvalidation.io에서 계정을 생성하여 API 키를 받아야 합니다. 계정을 생성하면 아래와 유사한 대시보드로 리디렉션됩니다. API 키는 검정색으로 강조 표시된 영역에 있습니다.

이메일 검증 서비스로 Flask 사용자 인증 강화

GET 요청을 하려면 requests을 설치해야 합니다. 가상 환경의 라이브러리:

pip install requests

다음으로 test.py을 만듭니다. 파일을 만들고 거기에 다음 코드를 추가하세요:

import requests
from requests.structures import CaseInsensitiveDict
def is_valid(email: str):
 url = f"https://api.emailvalidation.io/v1/info?email={email}"
 headers = CaseInsensitiveDict()
 headers["apikey"] = "your-api-key-here"
 response = requests.get(url, headers=headers)
 return response.json()
print(is_valid("support@emailvalidation.io"))
print(is_valid("venip42579@jdsdhak.com"))

is_valid 함수는 이메일 주소를 인수로 사용하고 이메일 주소로 URL을 구성하여 emailvalidation.io API를 호출합니다. CaseInsensitiveDict requests.structures의 클래스 모듈은 요청 헤더에 API 키를 설정하기 위해 대소문자를 구분하지 않는 키가 있는 사전을 생성하는 데 사용됩니다. 그런 다음 함수에서 JSON 응답을 반환합니다.

마지막으로 is_valid를 호출합니다. 함수가 유효한 이메일 주소(support@emailvalidation.io)를 모두 확인할 수 있는 방법을 보여주기 위해 서로 다른 이메일 주소를 사용하여 두 번 함수를 사용합니다. ) 및 잘못된 이메일 주소(venip42579@jdsdhak.com) ).

출력:

{
 "email":"support@emailvalidation.io",
 "user":"support",
 "tag":"",
 "domain":"emailvalidation.io",
 "smtp_check":true,
 "mx_found":true,
 "did_you_mean":"",
 "role":true,
 "disposable":false,
 "score":0.64,
 "state":"deliverable",
 "reason":"valid_mailbox",
 "free":false,
 "format_valid":true,
 "catch_all":"None"
}
{
 "email":"venip42579@jdsdhak.com",
 "user":"venip42579",
 "tag":"",
 "domain":"jdsdhak.com",
 "smtp_check":false,
 "mx_found":false,
 "did_you_mean":"",
 "role":false,
 "disposable":false,
 "score":0.64,
 "state":"undeliverable",
 "reason":"invalid_mx",
 "free":false,
 "format_valid":true,
 "catch_all":"None"
}

여기에서 응답의 다양한 키에 대해 알아볼 수 있습니다. emailvalidation.io의 JSON 응답을 기반으로 이메일 주소가 유효한지 또는 유효하지 않은지 확인하려면 다음 필드를 확인해야 합니다:

  1. format_valid :true인 경우 , 이메일 주소의 형식이 올바른지 확인하세요. false인 경우 , 이메일 주소가 유효하지 않습니다.
  2. mx_found :true인 경우 , 도메인에 대해 하나 이상의 MX 레코드가 발견되었습니다. false인 경우 , 도메인이 유효하지 않습니다.
  3. smtp_check :true인 경우 , 이메일 주소가 유효한 사서함을 가지고 있습니다. false인 경우 , 사서함이 유효하지 않습니다.
  4. state :이메일 주소의 현재 상태입니다. 값은 '배달 가능' 또는 '배달 불가'일 수 있습니다.

따라서 is_valid을 수정할 수 있습니다. 아래와 같이 JSON 객체 대신 부울 응답을 반환하는 함수:

import requests
from requests.structures import CaseInsensitiveDict
def is_valid(email: str):
 url = f"https://api.emailvalidation.io/v1/info?email={email}"
 headers = CaseInsensitiveDict()
 headers["apikey"] = "nUH1hmV24lEwX1TIXmsgRPRRZw0L0NuOeHrdMp78"
 response = requests.get(url, headers=headers)
 if response.status_code == 200:
 json_resp = response.json()
 format_valid = json_resp["format_valid"]
 mx_found = json_resp["mx_found"]
 smtp_check = json_resp["smtp_check"]
 state = json_resp["state"]
 return format_valid and mx_found and smtp_check and state == "deliverable"
 return False
print(is_valid("support@emailvalidation.io"))
print(is_valid("venip42579@jdsdhak.com"))

출력:

True
False

다음 섹션에서는 이 기능을 사용하여 사용자 등록 중에 이메일을 확인하게 됩니다.

Flask에서 기본 사용자 인증을 설정하는 방법

이 섹션에서는 Flask에서 기본 사용자 인증을 설정하는 단계를 안내합니다. 기본 사용자 인증을 구현하는 방법을 설명했던 이전 기사 중 하나의 코드를 사용하게 됩니다.

GitHub 저장소에서 email-validation로 코드를 끌어와서 시작할 수 있습니다. 폴더:

git init
git remote add origin https://github.com/ashutoshkrris/Flask-User-Authentication.git
git pull origin main

참고:git clone [https://github.com/ashutoshkrris/Flask-User-Authentication.git](https://github.com/ashutoshkrris/Flask-User-Authentication.git) . 명령 이 경우에는 디렉토리가 비어 있지 않기 때문에 실행되지 않습니다.

다음으로 requirements.txt이 표시됩니다. 시스템에서 애플리케이션을 실행하기 위한 종속성이 포함된 파일입니다. 다음 명령을 사용하여 종속성을 설치하십시오.

pip install -r requirements.txt

모든 종속성이 설치되면 프로젝트에 필요한 환경 변수를 추가해야 합니다. 프로젝트에 .env가 포함되어 있습니다. 모든 환경 변수가 포함된 파일입니다. 다음 명령을 실행하여 .env에서 모든 환경 변수를 내보냅니다. 파일:

source .env

다음으로 데이터베이스를 생성해야 합니다. 프로젝트는 Flask-Migrate를 사용하므로 다음 명령을 사용하면 데이터베이스를 만드는 것이 매우 간단한 작업입니다:

python manage.py db init
python manage.py db migrate
python manage.py db upgrade

이제 다음 명령을 사용하여 애플리케이션을 실행할 수 있습니다:

python manage.py run

애플리케이션이 실행되기 시작하고 http://localhost:5000/login로 이동할 수 있습니다. 웹 브라우저에서 애플리케이션을 확인하세요.

다음은 애플리케이션을 보여주는 데모 비디오입니다:

프로젝트 flask-validation 내부 , src이 표시됩니다. 소스 코드와 tests가 포함된 폴더 단위 테스트가 포함된 폴더입니다.

이 외에도 config.py도 있습니다. 애플리케이션에 대한 구성 설정과 manage.py가 포함된 파일 Flask-CLI를 사용하여 애플리케이션을 실행하고 테스트하기 위한 다양한 명령을 추가하는 파일입니다. .env와 같은 다른 파일도 찾을 수 있습니다. 그리고 requirements.txt 당신은 이미 알고 있는 내용입니다.

src 폴더에는 4개의 하위 폴더(accounts)가 포함되어 있습니다. , core , templatesstatic . templatesstatic 폴더에는 각각 HTML 파일과 CSS, 이미지, JavaScript 파일과 같은 정적 파일이 포함되어 있습니다. 다른 두 폴더, accountscore , Flask Blueprints 개념을 사용하고 애플리케이션의 다양한 부분에 대한 해당 코드를 포함합니다.

Flask 애플리케이션 구현에 대해 자세히 알아보려면 이 튜토리얼을 참조하세요.

Flask 앱에 이메일 검증 서비스를 통합하는 방법

지금까지는 이메일 주소의 유효성 여부에 관계없이 모든 이메일 주소를 사용하여 애플리케이션에 성공적으로 등록할 수 있습니다.

그러나 무작위 또는 잘못된 이메일 주소로 인해 데이터베이스가 복잡해지는 것은 바람직하지 않습니다. 따라서 사용자를 등록하기 전에 이메일 주소를 확인하는 것이 좋습니다. 이메일 주소가 유효하다면 성공적으로 사용자 등록을 진행하실 수 있습니다.

.env에 이메일 검증 API 키를 추가하세요. 대중에게 노출되지 않고 읽을 수 있도록 파일을 저장하세요.

export SECRET_KEY=fdkjshfhjsdfdskfdsfdcbsjdkfdsdf
export DEBUG=True
export APP_SETTINGS=config.DevelopmentConfig
export DATABASE_URL=sqlite:///db.sqlite
export FLASK_APP=src
export FLASK_DEBUG=1
export API_KEY=your-api-key-here

your-api-key-here을 교체하세요 올바른 API 키를 사용하세요. 다음으로, 환경 변수를 내보내려면 다음 명령을 다시 실행해야 합니다:

source .env

이제 utils.py을 생성하세요. accounts 내부의 파일 src의 하위 폴더 폴더. 파일에는 이메일의 유효성을 검사하는 유틸리티 기능이 포함됩니다. 파일에 다음 코드를 추가하세요:

import requests
from requests.structures import CaseInsensitiveDict
from decouple import config
def is_valid(email: str):
 url = f"https://api.emailvalidation.io/v1/info?email={email}"
 headers = CaseInsensitiveDict()
 headers["apikey"] = config("API_KEY")
 response = requests.get(url, headers=headers)
 if response.status_code == 200:
 json_resp = response.json()
 format_valid = json_resp["format_valid"]
 mx_found = json_resp["mx_found"]
 smtp_check = json_resp["smtp_check"]
 state = json_resp["state"]
 return format_valid and mx_found and smtp_check and state == "deliverable"
 return False

앞서 언급했듯이 is_valid() 함수는 이메일 주소가 유효한지 여부를 나타내는 부울 값을 반환합니다. 이 함수는 API 키 값을 하드코딩하지 않고 대신 환경 변수에서 검색한다는 점에 유의하는 것이 중요합니다.

다음으로 RegisterForm에서 forms.py의 클래스 파일에 validate가 있습니다. 방법. 이 메소드는 등록 프로세스 중에 사용자가 제출한 입력 데이터의 유효성을 검사합니다.

이전에는 이 방법으로 이메일이 이미 등록되었는지, 비밀번호가 일치하는지만 확인했습니다. 하지만 이제 추가 유효성 검사를 추가하여 이메일이 유효한지 확인할 수 있습니다. 따라서 수정된 validate 방법은 다음과 같습니다:

...
from src.accounts.utils import is_valid
...
class RegisterForm(FlaskForm):
 ...
 def validate(self):
 initial_validation = super(RegisterForm, self).validate()
 if not initial_validation:
 return False
 if not is_valid(self.email.data):
 self.email.errors.append("Email is invalid")
 return False
 user = User.query.filter_by(email=self.email.data).first()
 if user:
 self.email.errors.append("Email already registered")
 return False
 if self.password.data != self.confirm.data:
 self.password.errors.append("Passwords must match")
 return False
 return True

validate에서 메서드(self.email.data인 경우) (즉, 사용자의 이메일 주소)이 유효하지 않으면 self.email.errors에 오류 메시지를 추가합니다. False를 나열하고 반환합니다. 이는 사용자 데이터가 유효하지 않음을 의미합니다.

이제 어플리케이션을 실행하고 등록을 해보면 라이브로 보실 수 있습니다. 다음은 유효한 경우와 유효하지 않은 경우를 모두 보여주는 데모입니다.

이메일 검증 서비스로 Flask 사용자 인증 강화

이메일 검증 서비스의 기타 사용 사례

등록 중에 사용자의 이메일을 확인하는 것 외에도 이메일 확인 서비스에 대한 몇 가지 다른 사용 사례가 있습니다. 그 중 일부는 다음과 같습니다:

  1. 이메일 목록 정리:이메일 검증 서비스를 사용하면 유효하지 않거나 존재하지 않거나 위험한 이메일 주소를 제거하여 이메일 목록을 정리할 수 있습니다. 이는 이메일 전달성을 향상하고 이메일이 의도한 수신자에게 전달되도록 하는 데 도움이 될 수 있습니다.
  2. 사기 행위 예방:이메일 검증 서비스를 사용하여 가짜 계정 생성이나 사기 주문과 같은 사기 행위를 탐지할 수도 있습니다. 이러한 활동과 관련된 이메일 주소를 확인함으로써 그러한 활동이 발생하는 것을 방지할 수 있습니다.
  3. 마케팅 캠페인 향상:이러한 서비스는 이메일 마케팅 캠페인의 정확성과 효율성을 높이는 데도 도움이 될 수 있습니다. 이메일 주소가 유효하고 활성 상태인지 확인함으로써 기업은 이메일 전달률을 높이고 전반적인 캠페인 성과를 향상시킬 수 있습니다.

전반적으로 이메일 검증 서비스는 사용자 데이터의 정확성과 유효성을 보장하고 사기를 방지하며 사용자 경험을 개선하는 강력한 도구가 될 수 있습니다.

결론

이메일 검증 서비스는 사용자 이메일 주소 확인이 필요한 모든 애플리케이션을 위한 강력한 도구입니다. 오류를 방지하고 사용자 입력 데이터가 올바른지 확인하려면 이메일 주소가 유효한지 확인하는 것이 중요합니다.

이 기사에서는 emailvalidation.io API를 사용하여 Python에서 이메일 주소의 유효성을 검사하는 방법을 살펴보았습니다. 또한 사기 탐지, 이메일 마케팅 등 이메일 검증 서비스에 대한 다른 잠재적인 사용 사례도 배웠습니다.

애플리케이션에 이메일 확인 서비스를 구현하면 사용자 경험을 개선하고 데이터가 정확하고 최신 상태인지 확인할 수 있습니다.

추가 리소스

  • 청사진을 사용하여 Flask 앱을 구성하는 방법
  • Flask 앱에서 이메일 확인을 설정하는 방법
  • emailvalidation.io 문서

무료로 코딩을 배우세요. freeCodeCamp의 오픈 소스 커리큘럼은 40,000명 이상의 사람들이 개발자로 취업하는 데 도움을 주었습니다. 시작하세요