gpt4 book ai didi

joomla - Joomla 自定义组件的无效 token

转载 作者:行者123 更新时间:2023-12-05 08:59:31 28 4
gpt4 key购买 nike

我正在构建一个自定义 Joomla 组件,并将其添加到我的模板 (default.php) 文件(它使用 HTTP POST)中的表单中:

echo JHTML::_( 'form.token' ); //add hidden token field to prevent CSRF vulnerability

然后我检查 Controller 中的 token :

JRequest::checkToken() or die( 'Invalid Token' );

但无论我做什么,我都会得到一个无效 token 。当我在 html 页面上查看源代码时,我已验证在我的表单中创建了一个带有标记的隐藏类型。我还验证了,在 Controller 中, token 的值是相同的:

print_r(JUtility::getToken());

那么,如果 token 具有相同的值,到底为什么它会以无效 token 消息退出?

编辑: 有一个关键部分我没有提到。我的表单在一个单独的 js 文件中使用 jquery ajax 处理,该文件添加到我的 view.html.php 中。这是 ajax POST 的样子:

jQuery.ajax({
type: 'POST',
url: 'index.php?option=com_recordings&task=deletevideos&format=raw',
data: {checkedarray:checked},
success: function(data){
//delete row
}
});

Controller 处理这个:

function deletevideos()
{

$video_list = JRequest::getVar('checkedarray', 0, 'post', 'array');
//print_r(JUtility::getToken());
JRequest::checkToken() or jexit( 'Invalid Token' );

$model = &$this->getModel();
return $model->setDeleteVideos($video_list);
}

然后转到执行数据库更新的模型。我看到这个旧post这可能是相关的。我不清楚如何/在何处生成 token 以及在何处/如何验证该 token 。该帖子似乎很复杂,因为它还会检查用户,我认为在我的情况下不需要。还是我理解有误?

编辑 #2

好的, token 丢失了,我需要将它传递到我的 js 文件中。所以我想我可以将它添加到我的 view.html.php 中:

    $addtoken = JUtility::getToken();
$addtokenjs = 'jQuery(function() {
var token="'.$addtoken.'";
});';
$doc->addScriptDeclaration( $addtokenjs );
$doc->addScript(JURI::base()."components/com_recordings/js/recordings.js");

我必须将其放入文档就绪函数中,因为显然 addScriptDeclaration 不会在我的 recordings.js 文件之前放置任何内容。然后将 token 传递给 ajax 调用:

jQuery.ajax({
type: 'POST',
url: 'index.php?option=com_recordings&task=deletevideos&format=raw'+token+'=1',
data: {checkedarray:checked},
success: function(data){
//delete row
}
});

显然我没有正确执行此操作,因为我收到此错误:ReferenceError: token is not defined

最佳答案

您似乎没有在 ajax 请求中传递 token 值。这就是您收到此错误的原因。

你可以——1) 像这样将 token 附加到 url

url: 'index.php?option=com_recordings&task=deletevideos&format=raw&'. JUtility::getToken() .'=1'

2) 或者使用 Serialize 发送整个表格.

编辑 2:- 您可以像这样创建一个名为 getToken 的函数-

 $addtokenjs = 'function getToken() {
var token="'.$addtoken.'";
return token;
};';

并且在 url 中而不是调用 token 你可以调用 getToken()

url: 'index.php?option=com_recordings&task=deletevideos&format=raw'+getToken()+'=1'

希望这会奏效。

关于joomla - Joomla 自定义组件的无效 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14285536/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com