1

私のウェブサイトに統合された支払いゲートウェイがあります。ユーザーが支払いを終えると、www.example.com/redirectなどの特定のページにリダイレクトされます。ユーザーがこのURL(www.example.com/redirect)をアドレスバーに直接入力してページにアクセスできないようにしたい。できるだけ早く欲しいです。

実際には、ページはゲストユーザーから保護されていますが、ログインしたユーザーがそのURLを入力すると、そのページにリダイレクトされるため、支払いオプションはスキップされます。ユーザーが最初に金額を支払い、次にこのページにリダイレクトする必要があります。

4

3 に答える 3

1

例として joomla 以外の URL のみを示しているため、正確に答えるのは困難ですが、すべての Joomla スクリプトの先頭には次の行があります。

defined('_JEXEC') or die( 'Restricted access' );

明らかに、ユーザーが URL を入力するのを防ぐことはできないため、少なくともセッションが既に行われているかどうかを検出します。ユーザーがアクティブな Joomla セッションに参加していない場合、これが発生し、アクセスが妨げられます。リファラーが支払いゲートウェイであるかどうかなど、チェックする必要があるものに応じて、要件に合わせて実行したいことを簡単に実行できます。

于 2012-07-03T19:22:55.733 に答える
0

私も似たような欲求がありました。ユーザーがログインしていて、注文入力ページに入力した場合にのみページを表示したかったのです。

私がやろうと決めたのは、POST にデータがあるかどうかを確認することでした。

controller/place_order.php (スニペット)

public function submitOrder()
{
    $post = JRequest::get('post');
    $model = $this->getModel();
    if($post != null && $post != ''){
        if($model->placeOrder()){
        }
    }
    JRequest::setVar('layout', 'submitOrder');
    parent::display();
}

これにより、タスクがモデル内の placeOder 関数を実行できなくなります。次に、注文の送信ページに似たものを追加します。あなたの場合は「リダイレクト」します。

view/place_order/tmpl/submitOrder.php (スニペット)

defined('_JEXEC') or die('Restricted access');

$user =& JFactory::getUser();

if ($user->guest) {
echo "<p>You must login to access this page.</p>";
} 
else if($_POST == "" || $_POST == null){
    echo "<p>You can not directly access this page.</p>";
}else {
//Your order was submitted successfully HTML (don't forget to close it at the bottom ;)

それを行う方法はたくさんあります... したくない場合は、コントローラーをチェックインする必要さえないかもしれませんが、時間を節約するためにチェックインします。コードを見ずに答えを調整するのは難しいですが、ここで概念を理解すれば役立つはずです(願っています...)。

また、認証と権限に関する Joomla のこのページも参照してください。

于 2012-11-20T15:39:40.477 に答える
0

これは、コンポーネントのベース コントローラー ( controller.php) で行う必要があります。このコード スニペットを見ると:

// Check for edit form.
if ($vName == 'form' && !$this->checkEditId('com_weblinks.edit.weblink', $id))
{
    // Somehow the person just went to the form - we don't allow that.
    return JError::raiseError(403, 
    JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
}

このコード ブロックは、必要な処理を正確に実行することを目的としたほとんどのコア コンポーネントに存在します。これが実際にどのように機能するかは、$this->checkEditId()関数を通じて説明されます。このクラスに慣れていることを願ってJControllerFormいます。まだ API をチェックしていない場合は、こちらをご覧ください。ページの編集 ID の作成と「最後のページに基づいて特定のページへのアクセスをユーザーに許可する」ことは によって行われるためJControllerFormです。

于 2016-01-30T12:26:43.370 に答える