VisualforceでreCAPTCHAを実装

概要 SalesforceのCommunityやSites等で外部へ公開するページをVisualforceで実装する場合にBotによる標準型攻撃を受けないようにするための対策としてGoogle社が提供するreCAPTCHA(リキャプチャ)を使用して認証を実装するサンプルコードと手順を紹介します。 Googleへサイトの登録とAPIキーを発行 まず、下記のURLからGoogleへサイトの登録とAPIキーの発行を行います。右上のAdmin Consoleから登録できます。https://www.google.com/recaptcha/intro/v3.html 現在、Google社が提供しているreCAPTCHAには最新のv3と旧のv2がありますが、v2も引き続き使用できるようですので、そちらを使用したいと思います。また、ドメインには、公開サイトとなるCommunityやSitesのドメインを指定するようにしてください。今回は、テストで動作確認するのみなので、force.comを指定しておきます。 ここまでの入力が完了すると、Public KeyとSecret Keyが発行されます。こちらを実装するときに使用します。 Salesforceでリモートサイトへ登録 Apexでサーバー側で認証する際に、Googleのサーバーへリクエストする必要があるので、SalesforceのリモートサイトへURLを登録しておく必要があります。 Visualforceの実装 Visualforceでの実装サンプルは下記の通りとなります。チェックボックスの押下により発行されたトークンをhiddenの項目に保持しておき、サーバー送信時にPostします。 サーバー側(Apex)の実装 サーバー側(Apex)の実装サンプルは下記の通りとなります。クライアントからポストされたトークンとSecret Keyをパラメーターにして、所定のGoogle社のURLへPOSTして認証を実施して、レスポンスで結果を確認します。 デモ 下記のようの動作となりました。 参考 Adding

Continue reading

VisualforceでJavaScriptを共通化

VisualforceでJavaScriptを共通化 複数のVisualforceで同じようなJavaScriptでの処理を行いたい場合は、共通のVFページにJavaScriptを定義することで関数を共通化することができます。 呼び出しページでは、apex:includeタグのpageName属性で共通VFページを指定します。 サンプルコードは、以下となります。 呼び出しページ 共通ページ 参考 https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_compref_include.htm

Continue reading

複数Visualforceページ間で値の引き継ぎ

複数Visualforceページ間で値の引き継ぎ Visualforceでページを遷移する際に値を引き継ぐ2つの方法をサンプルコードベースで説明します。 ビューステート 複数のVFで同一のコントローラを使用することで、PageReferenceにより遷移するとビューステートの項目を引き継ぐことができます。 サンプルコードでは、TransferController.clsのconfirmメソッドでTest_TransferToState.pageのPageReferenceを返して遷移している部分になります。 Getパラメータ 複数のVFでコントローラを分割する場合には、URLのGetパラメータを使用することで項目を引き継ぐことができます。 サンプルコードでは、TransferController.clsのnextメソッドでTest_TransferToParam.pageのPageReferenceにpr.getParameters().put(”,”)で値を設定し、遷移して受けるVFのコントローラ(TransferReceiveController.cls)でApexPages.currentPage().getParameters().get(”)により値を取得します。 サンプルコード 補足 こちらにもアップしてます。 https://github.com/yhayashi30/visualforce-transfer-sample.git

Continue reading

sforce.oneオブジェクトによるLightning Experienceでのページ遷移

sforce.oneオブジェクトによるLightning Experienceでのページ遷移 Visualforceページはページ遷移する際には通常、遷移先のVFページを指定したPageReferenceをApexから返すことで遷移先へリダイレクトして遷移をさせます。 場合によってはJavaScriptのロジックでページを遷移させる際には、location.hrefでVFページのURLを指定して遷移させる方法もあります。 Lightning Experienceに埋め込まれたVisualforceページでは、location.hrefを使用した遷移は下記の通り推奨されておらず、sforce.oneを使うように記載されております。 window.location を直接設定しない これだけ言えば大丈夫でしょうか。この理由は簡単です。Lightning Experience では、ページに設定する window.location がないためです。Visualforce の「コンテナ」や、iframe でラップされること、Lightning Experience が単一ページアプリケーション (SPA) であることなどはすでに説明しましたが、この点も追記しておく必要があります。Visualforce の

Continue reading

VisualforceでAjaxによるApex呼び出し後のJSでView Stateを参照する方法

VisualforceでAjaxによるApex呼び出し後のJSでView Stateを参照するサンプルコード View Stateとは、Apexコントローラの状態やVisualforceページの状態をサーバーリクエスト間も保持するための、Visualforceページ内に暗号化されたhiddenのinputフィールドのことです。このフィールドはapex:formタグがページ上にある場合のみ生成されます。 本サンプルコードでは、タイトルの通りAjaxによるApex呼び出し(apex:actionFunctionやapex:actionFunction等)のoncompleteでコールバックしてJSの関数を呼び出した際に、JS上でView Stateの値を参照したい場合のものになります。

Continue reading