バージョン 2.0.3 のローカル ホストで正常に動作する Gallery という名前のモジュールを作成しましたが、リモート サイトでバージョン 2.1.0 を使用すると、フォームを送信できず、エラーが発生します。
要求したアクションは許可されていません。
どうしてこれなの?
バージョン 2.0.3 のローカル ホストで正常に動作する Gallery という名前のモジュールを作成しましたが、リモート サイトでバージョン 2.1.0 を使用すると、フォームを送信できず、エラーが発生します。
要求したアクションは許可されていません。
どうしてこれなの?
これは、CSRF保護に関連するCodeigniterエラーです。でキャンセルできますcms/config/config.php
プログラミングに関しては、問題を回避するのではなく、修正します。私が言いたいのは、この機能が使用できない場合、この機能はここにないということです。実装に問題があるだけです。
私の答え: 以下に示すように、application/config/config.php の次のエントリの値からすべてのダッシュ、ピリオド、およびその他の英数字以外の文字を削除します。
$config['sess_cookie_name'] = 'mycookiename'; //instead of "my_cookie_name"
$config['csrf_token_name'] = 'mycsrftoken'; //instead of "my.csrf.token"
$config['csrf_cookie_name'] = 'mycsrfcookie'; //instead of "my/csrf/cookie"
ところで、ダッシュが機能することもありますが、構成値に名前を付けるときは、可能な限り単一の単語を使用することをお勧めします。安全に作業できることを確認するためだけに、現在取り組んでいるものに関連する Codeigniter のコア ファイルを研究する時間とスキルがない限り、そうではありません。
とにかく、私の答えは1年以上遅れていますが、これが誰かの助けになることを願っています.
CI の外部 (Joomla) で作成されたフォームがありますが、CI で処理したいと考えていました。私の修正は、特定のリファラーに対して csrf を選択的に無効にすることでした。csrf のデフォルト設定オプションの直後に、これを設定に追加しました。
/* Set csrf off for specific referrers */
$csrf_off = array(
"http://yourdomain.com/your-form-url",
"http://yourdomain.com/some-other-url"
);
if (isset($_SERVER["HTTP_REFERER"])) {
if (in_array($_SERVER["HTTP_REFERER"],$csrf_off)) {
$config['csrf_protection'] = false;
}
}
これにより、$csrf_off 配列内の特定の URL に対する csrf 保護が無効になりますが、他のすべての要求に対してはそのまま残ります。
フォームヘルパー関数を使用して見つけました
例
<?php echo form_open('controller/function');?>
<?php echo form_input('username', 'Username');?>
<?php echo form_close();?>
上記のようなヘルパー関数を使用すると、CSRF エラー メッセージの表示が停止するはずです。
echo form_input() を使用しない場合、通常の入力だけを配置すると、リロード時に CSRF エラーがトリガーされます。
<?php echo form_open('controller/function');?>
<input type="text" name="username" />
<?php echo form_close();?>
したがって、今すぐすべてのフォーム ヘルパー関数を使用することをお勧めします。
これは古い質問ですが、これと同じ問題で非常に時間がかかったので、私の場合の問題を共有したいと思いました。それは誰かを助けるかもしれません。
Codeigniter 3.0.6 と CommunityAuth 3 を一緒に使用していますが、ログイン後にこのエラーが発生していました。
問題が発生する場合と発生しない場合があるため、混乱を招きました。
CI の config.php の「base_url」は、「www.mysite.com」のようなものに設定されていました
「mysite.com」でサイトを閲覧し (「www」がアドレスに含まれていないことに注意してください)、CI の「base_url」設定を使用するフォーム送信を行うと、CommunityAuth のログインと同様に、CSRF チェックが失敗し、「Theあなたが要求したアクションは許可されていません。エラー。
次のように codeigniter フォーム オープナーを使用します。
<php echo form_open(url,method,attributes);?>
詳細については、codeigniter フォームのドキュメントを参照してください。
私はCodeigniter 3と同じ問題を使用しています
要求したアクションは許可されていません。
Isaac Pak の指摘に基づいて、base_url を通常アドレス バーに入力したものに変更しました。このような...
置く代わりに
http://www.domain.org
このように書きます..
http://domain.org
私base_url()
はちょうど..
$config['base_url'] = 'http://domain.org/';
修正は私のサイトで機能します...
私にとっての問題は、次のように変更して機能したよりも、インデックスにビューをロードしていたことです。
public function index()
{
// Load Login Page
redirect('login/login_page','refresh');
}
public function login_page()
{
$data['title'] = 'Login Page';
$this->load->view('templates/header', $data);
$this->load->view('users/login_view', $data);
$this->load->view('templates/footer');
}