Code Monkey home page Code Monkey logo

email-verification-system's Introduction

Email-Verification-System

🌱概要

コンピュータ部品アプリケーション(メール検証システムによる拡張)

📝説明

このアプリケーションは、コンピュータ部品アプリケーションです。

RecursionのServers with Databasesコースで提供されたソースコードをもとにメール検証システムを拡張したものになります。

このアプリケーションでは、ユーザーが登録したコンピュータ部品を見ることができます。

コンピュータには、どのような部品が使われているのか把握することで、ユーザーが1からコンピューターを自作する場合などに役立ちます。

表示されるコンピュータ部品は、偽データがほとんどのため、実際には存在しないものもあることに注意してください。

基本的な機能として、以下のような機能を提供します。

  • ユーザー登録
  • ログイン
  • ログアウト
  • メール検証システム
  • コンピュータ部品の表示、登録、更新

多くの機能を実装していますが、このREADMEには、メール検証システムについてのみ記載します。

代わりに、今後作成予定の Social-Networking-Service に機能の一部としてメール検証システムを実装する予定です。

🚀メール検証システム

メール検証システムのイメージは、下記ユースケース図の通りです。

image

  1. ユーザーは、registerページでユーザー登録ができます。
  2. ユーザーが入力を完了すると、その情報は、form/registerルートへ送られます。
    ここでは、ユーザー情報をデータベースに登録し入力されたメールアドレスへ署名付きのURLを添えたメールを作成します。
    署名付きのURLは、以下のような形式のURLになります。
    userとsignatureパラメータはハッシュ化されている必要があります。
    https://yourdomain.com/verify/email?id=434554&user=179e9c6498071768e9c6dcb606be681b35ec39d7c1cd462af5eee998793de96a&expiration=1686451200&signature=dc6f3568745f317e0227956332b7845187a8f6b6b46f1b21e533957454cd11d9
  3. アプリケーションからユーザーのメールアドレスへメールを送信します。
  4. ユーザーは、Emailに受信されたメールを確認します。
  5. ユーザーが署名付きのURLにアクセスすると、URLを検証します。
    検証は、ミドルウェアとverify/emailルートで行われます。
    URLが改竄されていないか、期限切れでないかを確認します。
    問題がなければ、usersテーブルのemail_confirmed_atに検証した時間を更新します。
  6. 検証に成功すると、update/partにアクセスできるようになります。
  7. 未検証でサインインしたユーザーがupdate/partにアクセスした場合は、verify/resendページにリダイレクトされます。
    form/verify/resendでは、入力された情報をもとにユーザーのメールアドレスへの新しい検証メールの送信やメールアドレスの変更ができます。

メール検証システムに関係するファイルは、下記から確認することができます。

ファイル 変更点
Database/DataAccess/Implementations/UserDAOImpl.php update関数追加
Database/DataAccess/Interfaces/UserDAO.php update関数追加
Helpers/Authenticate.php isVerificationEmail関数追加
Helpers/Mail.php ファイル追加
Middleware/AuthenticatedMiddleware.php else if(!Authenticate::isVerificationEmail())処理追加
Middleware/GuestMiddleware.php if(Authenticate::isVerificationEmail()){...}else{...}処理追加
Routing/routes.php ■ 処理追加
register
■ルート追加
verify/email
verify/resend
form/verify/resend
Views/component/navigator.php Resendのリンク追加
Views/mail/templete.php ファイル追加
Views/mail/templete.txt ファイル追加
Views/page/send-verification-email.php ファイル追加

email-verification-system's People

Contributors

aki158 avatar

Watchers

 avatar

email-verification-system's Issues

テスト

必要なテスト項目を精査し、テストを実施して下さい。
テスト結果は、このIssueに記載してください。

【実装】検証リクエストの処理

以下要件を満たすように実装してください

ユーザーが検証リンク(ルート /verify/email)をクリックした際、署名付き URL を検証します。

  • ミドルウェアを介して URL 署名をチェックします。
  • ミドルウェアを通してリンクが期限切れでないことを確認します。
  • ルート内で、ユーザーの詳細が URL パラメータと一致していることを確認します。
  • ルート内で、データベースの email_verified 列を更新します。

【実装】登録時の検証メール送信

以下要件を満たすように実装してください

  • ユーザーが登録する際、自動的に署名付き検証 URL を生成し、ユーザーのメールアドレスに送信します。
  • 生成された署名付き URL は、id、user、expiration のクエリパラメータを URL 内にカプセル化する必要があります。
  • PHPMailer を使用して現在のユーザーに検証メールを送信する sendVerificationEmail 関数を実装します。
  • 検証リンクは 30 分で期限切れになるように設定します。

【実装】サインイン時の未検証ユーザーに対する検証

以下要件を満たすように実装してください

  • 未検証でサインインしたユーザーが任意のページにアクセスしようとすると、'Send Verification Email' ページにリダイレクトされるようにします。これは /verify/resend ルートになるでしょう。
  • このために認証ミドルウェアを更新することができます。
  • ユーザーが新しい検証メールを送信できるボタンを提供し、これは 30 分で期限切れになります。
  • 代替として、ユーザーがメールアドレスを変更する方法を提供します。このオプションを選択した場合、ユーザーのメールアドレスも変更され、新しい検証メールがこのメールアドレスに送信されるべきです。

READMEの作成

READMEを作成してください。
Text-Snippet-Sharing-Serviceの時と同等のレベルで記載してください。

【実装】メール検証用のGETルートの作成

以下要件を満たすように実装してください

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.