간단한 양식을 UserFrosting에 제출하려고 시도하고 있으며 데이터를 수정하지 않고 테스트 만 성공 메시지 만 표시합니다. 나는 Lesson 2에서 제공된 지침을 따르는하지만 난 CSRF 문제로 실행 :UserFrosting forms - CSRF 토큰이 잘못되었거나 누락되었습니다.
Invalid or missing CSRF token.
내가 놓친 게 무엇 :
UserFrosting 다음과 같은 오류를 반환? 나뭇 가지 파일의 맨 아래에 추가 된 스크립트 부분
<form class="form-horizontal" role="form" name="requestDescription" action="{{site.uri.public}}/soap/requests/desc/edit/{{ keyname }}" method="post">
<div class="form-group">
<label for="input_group" class="col-md-2 control-label">Name</label>
<div class="col-md-10">
<input type="text" id="input_name" class="form-control" name="lgname" placeholder="{{ name }}">
</div>
</div>
<div class="form-group text-center">
<button type="submit" class="btn btn-success text-center">Update</button>
</div>
</form>
:이 시점까지는 UserFrosting는 :(
에게 양식 소화하기 매우 쉬웠다 여기
<script>
$(document).ready(function() {
// Load the validator rules for this form
var validators = {{validators | raw}};
ufFormSubmit(
$("form[name='requestDescription']"),
validators,
$("#userfrosting-alerts"),
function(data, statusText, jqXHR) {
// Reload the page on success
window.location.reload(true);
}
);
});
</script>
이 내 컨트롤러의 두 가지 기능 :
public function soapRequestDescriptionEditPage($keyname){
if (!$this->_app->user->checkAccess('uri_soap_requests')){
$this->_app->notFound();
}
$requestDetails = $this->soapRequestReadMeta($keyname);
$schema = new \Fortress\RequestSchema($this->_app->config('schema.path') . "/forms/soap-request-description-edit.json");
$this->_app->jsValidator->setSchema($schema);
$this->_app->render('soap/soap-request-description-edit.twig', [
"name" => $requestDetails['name'],
"description" => $requestDetails['description'],
"keyname" => $keyname,
"validators" => $this->_app->jsValidator->rules()
]);
}
public function test(){
if (!$this->_app->user->checkAccess('uri_soap_requests')) {
$this->_app->notFound();
}
$post = $this->_app->request->post();
$ms = $this->_app->alerts;
$requestSchema = new \Fortress\RequestSchema($this->_app->config('schema.path') . "/forms/soap-request-description-edit.json");
$rf = new \Fortress\HTTPRequestFortress($ms, $requestSchema, $post);
$ms->addMessageTranslated("success", "Everyone's title has been updated!", $post);
$rf->sanitize();
if (!$rf->validate()) {
$this->_app->halt(400);
}
$data = $rf->data();
}
Entr 의 index.php 파일에서 이거 :
$app->post('/soap/requests/desc/edit/:request_id/?', function() use ($app) {
$controller = new UF\SoapController($app);
return $controller->test();
});
$app->get('/soap/requests/desc/edit/:request_id/?', function ($request_id) use ($app) {
$controller = new UF\SoapController($app);
return $controller->soapRequestDescriptionEditPage($request_id);
});
마지막으로, 스키마 :
{
"lgname" : {
"validators" : {
"length" : {
"min" : 1,
"max" : 150,
"message" : "The new title must be between 1 and 150 characters long."
}
},
"sanitizers" : {
"raw" : ""
}
}
}
을 당신은 당신이 여기 https://www.owasp.org/index.php/ CSRF 손쉽게 찾을 수 요청할 때마다에서 CSRF 토큰을 보낼 필요 Cross-Site_Request_Forgery_ (CSRF) – MONTYHS
https://github.com/userfrosting/UserFrosting/wiki/On-the-matter- 이 오류에 대한 자세한 내용은 CSRF 토큰을 참조하십시오. 또한, 당신의 URL과 컨트롤러의 "비누"가 SOAP을 가리키는 지 확신 할 수 없지만, UserFrosting은 대부분 RESTful 접근법을 사용합니다. 이것은 SOAP와는 확연히 다릅니다. – alexw