メール
 Computer >> コンピューター >  >> ソフトウェア >> メール

電子メール検証サービスによる Flask ユーザー認証の強化

電子メール検証サービスによる Flask ユーザー認証の強化

今日のデジタル世界では、オンライン セキュリティが非常に重要であり、ユーザー認証はその重要な側面です。

電子メールベースの認証は、ユーザーの登録とログインに最も一般的で広く使用されている方法の 1 つです。ただし、ユーザーが登録時に偽の電子メール アドレスや無効な電子メール アドレスを入力する可能性があるため、常に信頼できるとは限りません。これはセキュリティ上のリスクや詐欺につながる可能性があります。ここで、電子メール検証サービスが役に立ちます。

このチュートリアルでは、電子メール検証サービスを使用して、連絡先情報を検証することにより、ユーザー登録時の電子メール検証プロセスを自動化します。

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) が表示されるはずです。 ターミナル プロンプトに表示され、仮想環境がアクティブ化されたことが示されます。

電子メール検証は、ユーザー認証を必要とする Web アプリケーションにとって不可欠なプロセスであり、これを実行するにはさまざまな方法があります。

1 つの方法は、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 を呼び出します。 異なる電子メール アドレスを使用して 2 回関数を実行し、関数が両方の有効な電子メール アドレス (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 応答に基づいて電子メール アドレスが有効か無効かを判断するには、次のフィールドを確認する必要があります。

<オル>
  • format_valid :true の場合 、電子メール アドレスの形式は適切です。 false の場合 、電子メール アドレスが無効です。
  • mx_found :true の場合 、ドメインに対して少なくとも 1 つの MX レコードが見つかりました。 false の場合 、ドメインが無効です。
  • smtp_check :true の場合 、電子メール アドレスには有効なメールボックスがあります。 false の場合 、メールボックスが無効です。
  • 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 に移動できます。 Web ブラウザでアプリケーションを表示します。

    このアプリケーションを示すデモ ビデオは次のとおりです。

    プロジェクト flask-validation 内 、src になります。 ソース コードと tests を含むフォルダー 単体テストが含まれるフォルダー。

    これらに加えて、config.py もあります。 アプリケーションの構成設定と manage.py が含まれるファイル Flask-CLI を使用してアプリケーションを実行およびテストするためのさまざまなコマンドを追加するファイル。 .env などの他のファイルも見つかります。 と requirements.txt すでにご存知のことです。

    src フォルダーには 4 つのサブフォルダーが含まれています – accountscoretemplates 、および statictemplatesstatic フォルダーには、HTML ファイルと、CSS、画像、JavaScript ファイルなどの静的ファイルがそれぞれ含まれます。他の 2 つのフォルダー、accounts および core 、Flask ブループリントの概念を使用し、アプリケーションのさまざまな部分にそれぞれのコードを含めます。

    Flask アプリケーションの実装について詳しく知りたい場合は、このチュートリアルを参照してください。

    メール検証サービスを Flask アプリに統合する方法

    この時点までは、有効かどうかに関係なく、任意の電子メール アドレスを使用してアプリケーションに正常に登録できます。

    ただし、ランダムまたは不正確な電子メール アドレスがデータベースを乱雑にすることは望ましくありません。したがって、ユーザーを登録する前に電子メール アドレスを検証することをお勧めします。電子メール アドレスが有効な場合は、ユーザーの登録を正常に続行できます。

    電子メール検証 API キーを .env に追加します。 ファイルを公開せずに読めるように保存します。

    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 キー値をハードコーディングせず、環境変数から取得することに注意することが重要です。

    次に、RegisterFormforms.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 ユーザー認証の強化

    電子メール検証サービスのその他の使用例

    登録時にユーザーの電子メールを検証する以外にも、電子メール検証サービスにはいくつかの使用例があります。その一部は次のとおりです。

    <オル>
  • メール リストのクリーニング:メール検証サービスを使用して、無効なメール アドレス、存在しないメール アドレス、または危険なメール アドレスを削除してメール リストをクリーニングできます。これにより、メールの到達性が向上し、メールが目的の受信者に確実に届くようになります。
  • 不正行為の防止:メール検証サービスを使用して、偽のアカウントの作成や不正な注文などの不正行為を検出することもできます。これらのアクティビティに関連付けられたメール アドレスを検証することで、そのようなアクティビティの発生を防ぐことができます。
  • マーケティング キャンペーンの強化:これらのサービスは、メール マーケティング キャンペーンの精度と効果の向上にも役立ちます。メール アドレスが有効かつアクティブであることを確認することで、企業はメールの到達率を高め、キャンペーン全体のパフォーマンスを向上させることができます。
  • 全体として、メール検証サービスは、ユーザー データの正確性と有効性を確保し、詐欺を防止し、ユーザー エクスペリエンスを向上させるための強力なツールとなり得ます。

    結論

    電子メール検証サービスは、ユーザーの電子メール アドレスを検証する必要があるアプリケーションにとって強力なツールです。エラーを防止し、ユーザー入力データが正しいことを確認するには、電子メール アドレスが有効であることを確認することが重要です。

    この記事では、emailvalidation.io API を使用して Python で電子メール アドレスを検証する方法を説明しました。また、詐欺検出や電子メール マーケティングなど、電子メール検証サービスの他の潜在的な使用例についても学びました。

    アプリケーションに電子メール検証サービスを実装することで、ユーザー エクスペリエンスを向上させ、データが正確で最新であることを確認できます。

    追加リソース

    • ブループリントを使用して Flask アプリを整理する方法
    • Flask アプリでメール認証を設定する方法
    • emailvalidation.io ドキュメント

    無料でコーディングを学びましょう。 freeCodeCamp のオープンソース カリキュラムは、40,000 人以上の人々が開発者としての職に就くのに役立ちました。始めましょう


    1. AndroidおよびiPhone用のGmailで迷惑なMeetタブを無効にする方法

      Googleは、Meetビデオ会議サービスを強力に推進してきました。まず、同社はハングアウトをGoogle Meetに置き換え、次にGmailに迷惑なMeetタブを追加しました。これには、サービスをさらに推進するためのiPhoneとAndroid用のモバイルアプリが含まれます。 Google Meetは便利ですが、主に企業や企業を対象としているため、Gmailモバイルアプリに[Meet]タブを追加しても、通常のユーザーにはほとんど意味がありません。ありがたいことに、AndroidとiPhoneの両方でGmailの[Meet]タブを無効にすることができます。 それをどのように行うかを見てみま

    2. 予期せぬ Gmail のストレージ容量を獲得した方法:実践的なクリーンアップ ガイド

      2026 年 3 月 16 日、午前 9 時 30 分 EDT に公開 Jack は、2024 年 6 月から MakeUseOf の寄稿者であり、エンターテインメントとその関連テクノロジーを専門としています。彼は、インスピレーションと情報を与える魅力的なコンテンツの作成に情熱を持っており、2010 年以来、SlashGear、BestReviews、Ezvid Wiki など、いくつかの信頼できるオンライン リソースに記事やレビューを公開してきました。 ジャックの作品は、南アメリカからヨーロッパ、南アジア、極東に至るまで広範囲にわたっており、彼の経験は彼の執筆に影響を与え続けています。