この回では、Twilio を介した OTP 配信の実装、ゴルーチンを使用した非同期的な OTP 送信の最適化、および堅牢なトークンベースの認証システムの確立について詳しく説明します。
Twilio で OTP を送信する
Twilio のメッセージング API を使用して OTP を送信するためのコア機能を以下に示します。
func (app *application) sendOTPViaTwilio(otp, phoneNumber string) error { client := twilio.NewRestClientWithParams(twilio.ClientParams{ Username: os.Getenv("TWILIO_SID"), Password: os.Getenv("TWILIO_API_KEY"), }) params := &api.CreateMessageParams{} params.SetBody(fmt.Sprintf( "Thank you for choosing Cheershare! Your one-time password is %v.", otp, )) params.SetFrom(os.Getenv("TWILIO_PHONE_NUMBER")) params.SetTo(fmt.Sprintf("+91%v", phoneNumber)) const maxRetries = 3 var lastErr error for attempt := 1; attempt <= maxRetries; attempt++ { resp, err := client.SendSms(params) if err == nil { app.logger.Printf("Message SID: %s", resp.Sid) return nil } lastErr = err time.Sleep(time.Duration(attempt) * 100 * time.Millisecond) } return fmt.Errorf("failed to send OTP after %d retries: %w", maxRetries, lastErr) }
この機能は、Twilio の Go SDK を利用してメッセージを送信します。 from
番号は、事前に設定された Twilio 番号です。 信頼性を高めるため、再試行メカニズムが組み込まれています。
ゴルーチンを使用した非同期 OTP 送信
連続した OTP 送信はサーバーのパフォーマンスを妨げます。 この解決策には、ゴルーチンを利用して OTP 配信を同時に処理することが含まれます。 application
構造体が更新されます:
type application struct { wg sync.WaitGroup config config models data.Models logger *log.Logger cache *redis.Client }
ヘルパー関数によりバックグラウンド タスクの実行が容易になります:
func (app *application) background(fn func()) { app.wg.Add(1) go func() { defer app.wg.Done() defer func() { if err := recover(); err != nil { app.logger.Printf("Error in background function: %v\n", err) } }() fn() }() }
これは sync.WaitGroup
を使用してゴルーチンを管理し、シャットダウンする前に完了を保証します。
データベーストークンテーブル
ユーザー トークンを保存するために新しいデータベース テーブルが作成されます:
-- 000002_create-token.up.sql CREATE TABLE IF NOT EXISTS tokens ( hash bytea PRIMARY KEY, user_id bigint NOT NULL REFERENCES users ON DELETE CASCADE, expiry timestamp(0) with time zone NOT NULL, scope text NOT NULL ); -- 000002_create-token.down.sql DROP TABLE IF EXISTS tokens;
このテーブルには、ハッシュされたトークン、ユーザー ID、有効期限、およびトークンのスコープが保存されます。 データベースの移行は、migrate
.
トークンのモデルと機能
data/models.go
ファイルには、トークンの生成、挿入、取得の関数が含まれています。
// ... (other imports) ... package data // ... (other code) ... func generateToken(userId int64, ttl time.Duration, scope string) (*Token, error) { // ... (token generation logic) ... } func (m TokenModel) Insert(token *Token) error { // ... (database insertion logic) ... } func (m TokenModel) DeleteAllForUser(scope string, userID int64) error { // ... (database deletion logic) ... } func (m TokenModel) New(userId int64, ttl time.Duration, scope string) (*Token, error) { // ... (token creation and insertion logic) ... }
このコードは、トークンの作成、ハッシュ、データベースの対話を処理します。 New
関数は、新しいトークンを作成して保存します。
サインアップ ハンドラーの更新
cmd/api/user.go
ファイルのサインアップ ハンドラーは、OTP 検証が成功したときにトークンを発行するように変更されます。
// ... (other functions) ... func (app *application) handleUserSignupAndVerification(w http.ResponseWriter, r *http.Request) { // ... (input parsing and validation) ... // ... (OTP generation and sending logic) ... // ... (OTP verification logic) ... // ... (user creation or retrieval) ... token, err := app.generateTokenForUser(user.ID) if err != nil { // ... (error handling) ... } // ... (success response with token) ... }
これにより、トークンの生成がサインアップ フローに統合されます。
ミドルウェア層
3 つのミドルウェア層: recoverPanic
、authenticate
、および requireAuthenticatedUser
により、セキュリティとリクエスト処理が強化されます。 これらは、原文に示されているように実装され、ルートに適用されます。 コンテキスト管理関数 (contextSetUser
および contextGetUser
) は、リクエスト コンテキスト内でユーザー データを保存および取得するために使用されます。
サーバー構成にはこれらのミドルウェアが統合されており、例では requireAuthenticatedUser
を使用してルートを保護する方法を示しています。 将来の機能強化には、ファイルのアップロード、正常なシャットダウン、メトリクスの統合が含まれます。 完全なコードは GitHub で入手できます。
以上がGo を使用して OTP ベースの認証サーバーを構築する: パート 3の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

goisastrongchoiceforprojectsingingingimplicity、andconcurrency、butmaylackinadvencedecosystemmaturity.1)

go'sinit functionandjava'sstaticInitializerserserservetosetupenmentseforeThemainfunction、buttheydifferinexecution andcontrol.go'sinitissimpleandpleandpleandautomatic、suftable forbasicasiccicsiccicsiccicsicciscicsupsupsbutsbutcanleadeadcoMplecticaticifoverseforedifuredifuredifuredifuredifuredifuredifuredifuredifuredifuredifured

fortheInit functioningoareの場合:1)configurationfilesbemainprogramstarts、2)初期化Globalvariables、および3)running-checksSorvalidationseforetheprogramprocutess.theinitistomationaledemainforeThemainfunction、Makin

cannelsElcialing of renablingsefientive communication betweengoroutines

GOでは、エラーをラップし、エラーを介してコンテキストを追加できます。 1)エラーパッケージの新機能を使用して、エラーの伝播中にコンテキスト情報を追加できます。 2)fmt.errorfおよび%wを介してエラーをラッピングして問題を見つけるのを手伝ってください。 3)カスタムエラータイプは、より多くのセマンティックエラーを作成し、エラー処理の表現力を高めることができます。

goooffersbustfeaturesforsecurecoding、butdevelopersmustimplementsecuritybestpracticive.1)usego'scryptageforsecuredathing.2)surncurrencywithranciationwithranizationprimitivestopreventraceconditions.3)sanitexe zeexerinputeterinpuptoravoidsqlinj

Goのエラーインターフェイスは、TypeErrorInterface {error()String}として定義され、エラー()メソッドを実装する任意のタイプをエラーと見なすことができます。使用の手順は次のとおりです。1。iferr!= nil {log.printf( "anerroroccurred:%v"、err)return}などのエラーを基本的にチェックおよびログエラー。 2。TypeMyErrorStruct {MSGSTRINGDETAILSTRING}などのより多くの情報を提供するカスタムエラータイプを作成します。 3.エラーラッパー(GO1.13以降)を使用して、元のエラーメッセージを失うことなくコンテキストを追加する、

Effectivitive Handleerrorsinconconconcurentgoprograms、usechannelstocommunicateerrors、Implienterrorwatchers、Sunidertimeouts、usebufferedchannels、およびprovideclearerrormess.1)usechannelstopasserrors fromgoroutineStothemainctunction.2)Anerrorwatcherを実装します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

WebStorm Mac版
便利なJavaScript開発ツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

メモ帳++7.3.1
使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









