以前の質問 までフォローアップ:
簡単なカスタムDrupalモジュールを作成して、連絡先の関連組織に関する情報を表示します(興味がある場合は、上記の詳細情報を参照してください)。
1つの使用例は、ログインしたユーザーにこの情報が表示されることです。この場合、情報を表示するかどうかの決定は簡単です(Drupal連絡先IDを使用してCiviCRMから情報をプルします)。
ただし、CiviMail経由で送信されたチェックサムリンクから誰かがページにアクセスした場合、Drupalはユーザーを匿名と見なします。URLからcid
(CiviCRM連絡先ID)をプルできます情報漏えいの可能性なしに情報を表示するために、チェックサムも検証できる必要があります。
私はこの関数を見つけました:CRM_Contact_BAO_Contact_Utils::generateChecksum($contactId)
しかし、これはチェックサムを生成します。 (URLから)既存のチェックサムを確認するだけで、新しいチェックサムを作成する必要はありません。
少しぐったりして、私はこれを見つけました:
CRM_Contact_BAO_Contact_Utils::validChecksum($cid, $_GET["cs$c"])
civiCRM連絡先ID($cid
)そしてそれをURLのチェックサムと比較して、次のように私のためにトリックを行いました:
$cid = check_plain($_GET['cid']);
if ($cid != "" && CRM_Contact_BAO_Contact_Utils::validChecksum($cid, $_GET["cs$c"])) {
//Contact ID and Checksum match up, embed a view
//with $cid as an argument (or other custom functionality)
} else {
//Not a match, decide what you want to do in this case
//(e.g. check if user is logged in, or display error...)
}
UPDATE:
(上記はまだ私のために働いていましたが)上記をそこから引き出したので、使用法はコアでわずかに変更されたようです。これを試してください( ここから取得 ):
//check if this is a checksum authentication
$userChecksum = CRM_Utils_Request::retrieve('cs', 'String', $this);
if ($userChecksum) {
//check for anonymous user.
$validUser = CRM_Contact_BAO_Contact_Utils::validChecksum($tempID, $userChecksum);
if ($validUser) {
return $tempID;
}
}