1. 背景最近、プロジェクト開発演習ではログイン機能+検証コードの要件が使用されました。検証コードは一般的に、画像検証コード、SMS検証コード、スライド検証コードの3種類に分けられます。関連する実装のアイデアは次のとおりです。 画像認証コード 画像検証コードの実装は、 SMS認証コード SMS検証コードの主なアイデアは、サードパーティのSMSインターフェースを呼び出して携帯電話にSMSを送信し、ユーザーの入力を受信して、システムによって生成された乱数文字列と比較することです。 スライド認証コード スライディング検証コードは通常、Tencent Waterproof Wall、JiTian Verification などのサードパーティの検証コード サービス プロバイダーによって提供されます。弊社独自の認証コードと比較すると、サードパーティの認証コードはより安全で信頼性が高いです。 この記事では、テンセント防水壁を例に、 2. 検証プロセス検証のフロントエンドとバックエンドの呼び出しシーケンス図は次のとおりです(画像はTencent検証コードの公式ドキュメントから引用) 3. 検証を作成するまず、Tencent Cloud コンソールにログインしてクラウド API キーを作成します。左側のナビゲーション バーで [アクセス管理] > [API キー管理] を選択して API キー管理ページに入り、[新しいキー] をクリックしてキーを作成します。 次に、検証コードコンソールに入り、[新しい検証]をクリックし、必要に応じて検証名、検証ドメイン名、検証チャネル(Webまたはミニプログラムプラグイン)、検証シナリオを入力し、入力後、[OK]をクリックして検証の作成を完了します。 最後に、申請したリソース情報を確認します。 4. フロントエンドコード4.1 コアjsファイルを追加する防水壁のフロントエンドコア <!DOCTYPE html> <html> <ヘッド> <メタ文字セット="utf-8"> <meta name="viewport" content="width=デバイス幅,初期スケール=1.0"> <script src="https://ssl.captcha.qq.com/TCaptcha.js"></script> <title>opsweb</title> </head> <本文> <div id="アプリ"></div> <!-- ビルドされたファイルは自動的に挿入されます --> </本文> </html> または、 // 防水壁検証コードのコア js ファイルをインポートします。import "../static/js/TCaptcha"; 4.2 設定を追加する
エクスポートデフォルト{ HOST: 'http://opsapi.ssgeek.com:8000', // バックエンド API アドレス TC_captcha:{ app_id: "2020427221", // Tencent Waterproof Wall APPID 構成}, } 4.3 コンポーネントの変更ログインページの <テンプレート> <!--ログインコンテンツ開始--> <div class="inp" v-if="ログインタイプ==0"> <input v-model="ユーザー名" type="text" placeholder="ユーザー名" class="user"> <input v-model="password" type="password" name="" class="pwd" placeholder="password"> <div class="rember"> <p> <input v-model="remember_me" type="checkbox" class="no" name="a"/> <span>パスワードを記憶する</span> </p> </div> <button class="login_btn" @click="show_captcha">ログイン</button> <!--ログインコンテンツの終了--> </div> </テンプレート>
<スクリプト> エクスポートデフォルト{ 名前: 'ログイン', データ() { 戻る { ログインタイプ: 0, remember_me: 偽、 ユーザー名: "", パスワード: "", } }, メソッド: { キャプチャを表示(){ var captcha1 = 新しい TencentCaptcha(this.$settings.TC_captcha.app_id, res=> { /* 解像度: appid: "2020427221" # 認証コードのAPPID randstr: "@GCV" # 重複を防ぐためのランダムな文字列 ret: 0 # 0 はユーザー操作が成功したことを意味し、2 はユーザーが検証コード ウィンドウをアクティブに閉じたことを意味します ticket: "" # 検証後のチケットはバックエンドに提供され、検証コード サーバーで処理されます */ // コンソールログ(res); this.$axios.get(`${this.$settings.HOST}/users/captcha/`, { パラメータ:{ チケット: res.ticket、 ランダム文字列: res.randstr, } }).then(応答=>{ if(レスポンスデータの詳細){ // ログイン処理を続行します this.login(); } }).catch(エラー=>{ this.$message.error("申し訳ございません。認証コードが失敗しました!"); }); }); captcha1.show(); }, ログイン() { // ユーザーがユーザー名またはパスワードを入力するかどうかを判断します。それ以外の場合は、ユーザーに入力を求めます。if (!this.username) { this.$message.error('ユーザー名を入力してください!') } それ以外の場合 (!this.password) { this.$message.error('パスワードを入力してください!') } それ以外 { // ユーザー名とパスワードで投稿リクエストを送信します this.$axios.post(`${this.$settings.HOST}/users/login/`, { ユーザー名: this.username, パスワード: this.password, }).then((res) => { //トークンを保存 if (this.remember_me) { ローカルストレージトークン = res.data.token; sessionStorage.removeItem('トークン') } それ以外 { セッション ストレージ トークン = res.data.token; localStorage.removeItem('トークン') } // ホームページにジャンプします this.$router.push('/hippo/showcenter') }).catch((error) => { // リクエストによって返されたエラー、4xx、5xx をキャプチャします this.$message.error('ユーザー名またはパスワードが正しくありません。再入力してください!') }) } }, }, }; 5. バックエンドコード関連する操作手順については、公式の例を参照してください:https://007.qq.com/python-access.html 5.1 設定を追加するTencent Verification Code Consoleで表示される検証情報をDRFバックエンドコードの設定ファイルに設定する # テンセント防水壁構成 TENCENT_CAPTCHA = { "GATEWAY": "https://ssl.captcha.qq.com/ticket/verify", # 検証コード検証アドレス "APPID": "2020427221", # 検証コードアプリケーションのAPPID "App_Secret_Key": "0mnAr1EpNTjm63fQgKPU87w**", # 検証コードアプリケーションの AppSecretKey } 5.2 確認の受け取りと返却ユーザー rest_framework.views から APIView をインポートします rest_framework.response から Response をインポート rest_framework からインポートステータス django.confから設定をインポートする urllib.parse から urlencode をインポートする urllib.request から urlopen をインポート jsonをインポート SSLをインポートする # ここでビューを作成します。 クラス CaptchaAPIView(APIView): """検証コード""" ssl._create_default_https_context = ssl._create_unverified_context def get(self, request): 「クライアントから送信された確認コード情報を受信する」 パラメータ = { 「援助」: settings.TENCENT_CAPTCHA.get("APPID"), 「AppSecretKey」: settings.TENCENT_CAPTCHA.get("App_Secret_Key"), "チケット": request.query_params.get("チケット"), "Randstr": request.query_params.get("randstr"), "ユーザーIP": request._request.META.get("REMOTE_ADDR") } # 辞書データをアドレスバーのクエリ文字列形式に変換します# aid=xxx&AppSecretKey=xxx&xxxxx パラメータ = urlencode(パラメータ) # print(パラメータ) url = settings.TENCENT_CAPTCHA.get("ゲートウェイ") # http get リクエストを送信します f = urlopen("%s?%s" % (url, params)) # https://ssl.captcha.qq.com/ticket/verify?aid=xxx&AppSecretKey=xxx&xxxxx # f.read() 応答情報を読み取る content = f.read() res = json.loads(コンテンツ) # 印刷(res) int(res.get("response")) == 1の場合: # 検証成功 return Response({"detail": 1}) それ以外: # 検証に失敗しました return Response({"detail": 0}, status=status.HTTP_400_BAD_REQUEST) 5.3 URLルーティングを追加する最後に、フロントエンドがリクエストを送信するためのバックエンドURLルーティングを追加します。 django.urls インポートパスから rest_framework_jwt.views から、obtain_jwt_token をインポートします。 から。インポートビュー urlパターン = [ パス('login/'、obtain_jwt_token)、 path('captcha/', views.CaptchaAPIView.as_view()), # 検証コードの検証] 6. テストを実行する最終的な効果は次のようになります テンセント認証コードの背景には、詳細なリクエスト情報チャートが表示されます。 vue+drf+third-party スライディング検証コード アクセスの実装に関するこの記事はこれで終わりです。vue+drf+third-party スライディング検証コード アクセスの関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: 3つのDocker Nginxログの処理の詳細な説明
問題の説明VMware Workstationが新しい仮想マシンを作成し、64ビットオペレーティング...
序文会社の業務上のニーズにより、独自の MongoDB サービスを構築する予定です。MongoDB ...
序文BINARY と VARBINARY は、文字列ではなくバイナリ文字列を格納する点を除いて、CH...
ベクトル波 <svg viewBox="0 0 560 20" class...
1. 説明MySQLでは、テーブル内の行の総数を取得する必要がある場合、通常は次の文を使用します。 ...
コンピューターに Linux Ubuntu システムをインストールしました。初めてインストールしまし...
リンクのターゲット属性は、リンクが開く場所を決定します。その値は通常、_blank、_self、_p...
1つのポートの変更バージョン 3.2.0 では、ネームノード ページ ポートは 9870、データノー...
最近、CSS3に関する知識や記事をたくさん読んできましたが、CSS3はとても便利に使えると思います。...
多くの人が、ウェブサイト上のテキストはデザインする必要があるのかと疑問に思うかもしれません。多く...
目次1. 問題の背景: 2. 問題の原因: 3. 問題解決:要約: 1. 問題の背景: window...
この記事では、MySQL 8.0のインストールと設定方法を参考までに紹介します。具体的な内容は以下の...
注意すべき点は、イベントバブリング自体の特性上、メリットだけでなくデメリットも生じるということです。...
*ページを作成する: 2つの入力ボックスとボタン*コードと手順/* 1. 入力行と列の値を取得する2...
MACでMySQLの初期パスワードを忘れた問題を解決する方法を参考までに共有します。具体的な内容は次...