私は以前にJoomlaでこのページで説明されている方法を何度も使用しました:
http://docs.joomla.org/How_to_add_CSRF_anti-spoofing_to_forms
Joomla Framework と Framework App を使用して同じメカニズムを実装したいと思います。だから私はこれを試しました:
$token = $this->app->getFormToken();
しかし、これによりアプリケーションが終了します。コードをステップ実行しましたが、問題はここのgetFormToken関数で始まります。
return md5($this->get('secret') . $userId . $this->session->getToken($forceNew));
$ this-> get( 'secret')は、 'secret'にドットがないため、ここに戻ります。
if (!strpos($path, '.'))
{
return (isset($this->data->$path) && $this->data->$path !== null && $this->data->$path !== '') ? $this->data->$path : $default;
}
次に、この関数はSymfonyから実行されます:
public function write($sessionId, $data)
{
return (bool) $this->handler->write($sessionId, $data);
}
そして最後にこの関数が実行されます:
public function close()
{
$this->active = false;
return (bool) $this->handler->close();
}
アプリケーションを終了します。
何が悪いのですか?どこかに「秘密」を追加する必要がありますか?フォームが送信されたときに確認するフォームトークンをどのように生成しますか?
ようやく解決しました。 getFormTokenが機能する前に、セッションを作成してアプリに割り当てる必要がありました。したがって、最初にJoomlaセッションを使用します。
use Joomla\Session\Session;
次に、セッションを作成して設定し、フォームトークンを取得します。
$session = Session::getInstance('none');
$this->app->setSession($session);
$token = $this->app->getFormToken();
方法がわかれば簡単!これが他の誰かの役に立つことを願っています。