Laravel「標準」によるSMS認証コード送信機能を開発

不言
リリース: 2023-03-31 21:34:02
オリジナル
3380 人が閲覧しました

Laravel は、シンプルでエレガントな PHP Web 開発フレームワーク (PHP Web フレームワーク) です。次に、この記事では、Laravel での SMS 認証コード送信機能の「標準」開発について説明します。必要な方は参照してください。

#Laravel の概要

Laravel は、シンプルでエレガントな PHP Web 開発フレームワーク (PHP Web フレームワーク) です。ヌードルのような乱雑なコードから解放され、完璧なネットワーク APP を構築するのに役立ち、コードの各行が簡潔で表現力豊かになります。


Laravel には、高度な PHP ActiveRecord 実装である Eloquent ORM がすでにあります。関係の両側に「制約」を簡単に適用できるため、データを完全に制御し、ActiveRecord の利便性をすべて享受できます。 Eloquent は、Fluent のクエリ ビルダー (クエリ ビルダー) のすべてのメソッドをネイティブにサポートします。

Laravel での SMS 認証コード送信機能の「標準」開発要件シナリオ

携帯電話またはメールに「認証コード」または「メッセージ通知」を送信します。

完成

まず、Laravelの仕様としてはLaravelの「メッセージ通知」を利用することになっており、ここでは「検証」というシナリオをベースにしています。コード"。この要件は、ほぼすべてのソフトウェア システムで使用されます。

通知シーンの作成

最初のステップは、作成が成功した後、phpArtisan make:notification を使用して通知クラスを作成することです。デフォルトでは、toMail と toArray という 3 つの通知クラスが存在します。検証コードが送信されるため、このコントロール クラスの名前は VerificationCode です。

次に、検証コードのデータ モデルとデータ テーブルの移行を作成します。phpArtisan make:model \"VerificationCode\" -m を使用して、データ モデルと移行を直接簡単に作成できます。

ThinkSNS の移行は次のとおりです:

#2 番目のステップは、データ モデル クラスを開き、その中に Illuminate\Notifications\Notifiable トレイトを追加することです。

コードを見ると、携帯電話番号またはメールアドレスに基づいて確認コードが送信されるため、「ソフト削除」も追加されていることがわかります。他の組み込みのトリックやトリックは必要ありません。「メッセージ通知データ テーブル」に記録されるため、routeNotificationFor メソッドでは、送信する必要があるアカウント (携帯電話番号または電子メール) を直接返すことを選択します。

#ファクトリ モードに参加し、すぐに送信します。database/factories/ModelFactory.php を開き、通知データ モデルに関するファクトリ定義を追加します。

#このようにして、検証コードをすばやく作成し、factory(\Zhiyi\Plus\Models\VerificationCode::class) ファクトリ関数を通じて通知を送信できます。

通知特性を検証コード データ モデルに追加するのはなぜですか?

まず、Laravel ではデフォルトで Illuminate\Notifications\Notifiable が User モデルに追加されるので、$user->notify() を通じてユーザーにすぐに通知を送信できますが、このようなものもあります文:

Illuminate\Notifications\Notifiable トレイトはどのモデルでも使用できることを覚えておいてください。User モデルにのみ含めることに限定されません。

これは Laravel です。公式ドキュメントの元の文言は、Illuminate\Notifications\Notifiable が User モデルのみで使用されるわけではないことを意味します。

そこで、検証コードモデルに Illuminate\Notifications\Notifiable を追加します。これは、Laravel 通知の正しい使用と完全に一致しています。

通知クラスの開発

まず、データ テーブルの移行には、通知チャネル識別子であるフィールド チャネルがあります。この値を使用して検証コードの送信方法を決定できます。この操作は通知クラスの via で実装されます:

選択した方法は、チャネル値は、任意の値にすることができます。この通知チャネルを実装している限り、送信できます。Laravel には、いくつかの送信チャネル データベース、メール、nexmo

Complete が組み込まれています。電子メール検証コードの送信

#実際には、通知クラスを作成するときに toMail メソッドが完成しているので、そのメソッドを直接変更できます。メッセージの内容。

SMS 確認コードの送信を完了します

テキスト メッセージの送信には、overtrue/easy-sms パッケージを使用します。これは、An Zhengchao によって開発されたテキスト メッセージ送信クライアントであり、多くのテキスト メッセージ プラットフォームが組み込まれており、実装も優れています。 (Tucao: コントラクトの呼び出し方法に従ってゲートウェイを通過しないなど、細部には問題がありますが)

最初に SMS を利用してクライアント パッケージ コンポーザーに overtrue/easy-sms が必要なメッセージを送信してから、新しい構成を作成します/config/sms.php、コンテンツは何ですか? easy-sms ホームページの指示に従って追加してください (記事の文字数を減らすために、Alibaba の設定のみを保持します)。 ):

メッセージ送信者が構成を読みやすくするための検証コード シナリオ コードなど、さまざまなシナリオ用のチャネル構成を追加しました。 。

次に、AppServiceProvider.php を開いて、以下をレジスタに追加します:

ここまでで、Laravel への EasySms の統合は完了しましたが、実際の機能はまだ開発されていません。

SMS 送信チャネルの開発

なぜ開発するのか?まず、easy-sms は多くの機能をサポートしています。送信プラットフォームごとに通知送信チャネル クラスを開発することを検討することも、SMS 送信チャネル クラスを 1 つだけ開発することもできます。 SMS 戦略。検証コードを複数のプラットフォームに送信するメカニズム。

まず、新しい app/Notifications/Channels/SmsChannel.php ファイルを作成します。Laravel には生成機能がないため、これを自分で作成する必要があります。 SmsChannel の内容は次のとおりです。

easy-sms に基づく SMS 通知送信チャネルが完成しました。

メッセージを送信する開発シナリオ

この部分は完全に easy-sms 開発に属し、次の内容の新しい VerificationCodeMessage.php を作成します。 :

次に、VerificationCode 検証コード通知クラスに戻り、toSms メソッドを追加します。コードは次のとおりです。

シナリオ構成 : 検証コードのさまざまなチャネルのテンプレートなど。これにより、メッセージ サーバーは送信ゲートウェイに基づいて使用シナリオの構成を決定できます。

もう一度文句を言いますが、easy-sms のコントラクト設計にもこの考えがあるはずですが、実際のゲートウェイが呼び出されたときに、getContent/getTemplate/getData はゲートウェイをまったく通過しません。 。 。

さて、開発は完了しました。

検証コードの送信

検証コードのデータモデル作成時に「ファクトリ」に追加されているので、ファクトリを利用できるようになります。直接機能が完成しました。デモを送信してください:

#これで完了です。easy-sms は非常に優れたパッケージです。

上記のコードはすべて ThinkSNS Plus からのものです

上記はこの記事の全内容であり、皆様の学習に役立つことを願っています。 PHPの中国語サイトです!

関連する推奨事項:

Laravel を介したユーザー登録とログイン

Laravel5 フレームワークで表示する配列の転送方法を学習する


以上がLaravel「標準」によるSMS認証コード送信機能を開発の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート