আমি Membership.create
ব্যবহারকারীর ফাংশনটি ব্যবহার করছি , তারপরে নিম্নলিখিত ত্রুটিটি ঘটছে,
প্রয়োজনীয় অ্যান্টি-ফোরজি ফর্ম ফিল্ড "__RecquestVerificationsToken" উপস্থিত নেই
আমি এটা কিভাবে ঠিক করবো?
আমি Membership.create
ব্যবহারকারীর ফাংশনটি ব্যবহার করছি , তারপরে নিম্নলিখিত ত্রুটিটি ঘটছে,
প্রয়োজনীয় অ্যান্টি-ফোরজি ফর্ম ফিল্ড "__RecquestVerificationsToken" উপস্থিত নেই
আমি এটা কিভাবে ঠিক করবো?
উত্তর:
আপনার কাছে [ValidateAntiForgeryToken]
আপনার কর্ম সামনে অ্যাট্রিবিউট। @Html.AntiForgeryToken()
আপনার ফর্মটিও যুক্ত করা উচিত ।
Html.AntiForgeryToken();
কাজ করে না !! পরিবর্তিত করা হচ্ছে @Html.AntiForgeryToken()
কাজ
আমার ক্ষেত্রে, আমার ওয়েবকনফাইগে এটি ছিল:
<httpCookies requireSSL="true" />
তবে আমার প্রকল্পটি এসএসএল ব্যবহার না করার জন্য সেট করা হয়েছিল। এই লাইনটি সম্পর্কে মন্তব্য করা বা প্রজেক্ট সেটআপ করা সর্বদা এসএসএল ব্যবহারের জন্য এটি সমাধান করে।
IIS
এই বাঁধাই ছিল ( https » EmptyHostName » IP » 443
) তবে ( https » www.mysite.com » IP » 443
) এর জন্য কোনও বাঁধাই ছিল না । তাই আমি একটি সঙ্গে বাঁধাই একটি নতুন যোগ খালি নয় এমন হোস্টনেম জন্য https
ছিল ডোমেইন সমান এবং এটা সমস্যার সমাধান। আমার IIS
জোর http 2 https
করে পুনরায় লেখার সেটিংস রয়েছে ।
এটার মত:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult MethodName(FormCollection formCollection)
{
...
Code Block
...
}
@using(Html.BeginForm())
{
@Html.AntiForgeryToken()
<input name="..." type="text" />
// rest
}
এছাড়াও [নিশ্চিত করুন যে [এইচটিপিপি]] এর অধীনে [ValidateAntiForgeryToken] ব্যবহার করবেন না।
[HttpGet]
public ActionResult MethodName()
{
..
}
কুকি সক্ষম না থাকা সত্ত্বেও আপনি ত্রুটিটি পাবেন।
আর একটি জিনিস যা এর কারণ হতে পারে (কেবল এটির মধ্যে দৌড়ে গেছে) তা হ'ল: যদি আপনি কোনও কারণে আপনার ফর্মের সমস্ত ইনপুট ক্ষেত্র অক্ষম করে থাকেন। এটি আপনার যাচাইকরণ টোকেন ধারণ করে এমন লুকানো ইনপুট ক্ষেত্রটি অক্ষম করবে। ফর্মটি যখন পোস্ট করা হবে তখন টোকেন মানটি অনুপস্থিত হবে এবং এটি অনুপস্থিত ত্রুটি তৈরি করবে। সুতরাং আপনাকে যা করতে হবে তা হ'ল ইনপুট ক্ষেত্রটিকে পুনরায় সক্ষম করে যা যাচাইকরণ টোকেন ধারণ করে এবং সমস্ত কিছু ঠিকঠাক হবে।
অনুরোধের অংশ হিসাবে আমাদের মধ্যে ফাইলগুলি আপলোড করার জন্য আরেকটি সম্ভাবনা। যদি সামগ্রীর দৈর্ঘ্য অতিক্রম করে <httpRuntime maxRequestLength="size in kilo bytes" />
এবং আপনি অনুরোধ যাচাইকরণ টোকেনগুলি ব্যবহার করেন তবে ব্রাউজারটি 'The required anti-forgery form field "__RequestVerificationToken" is not present'
অনুরোধের দৈর্ঘ্য ছাড়িয়ে যাওয়া বার্তার পরিবর্তে বার্তাটি প্রদর্শন করে ।
অনুরোধটি পূরণের জন্য পর্যাপ্ত পরিমাণে ম্যাক্সেকুয়েস্টএলস্টে সেট করা তাত্ক্ষণিক সমস্যাটি নিরাময় করে - যদিও আমি স্বীকার করব যে এটি কোনও উপযুক্ত সমাধান নয় (আমরা ব্যবহারকারীকে ফাইলের আকারের আসল সমস্যাটি জানতে পারি, অনুরোধ যাচাইকরণের টোকেনগুলি অনুপস্থিত নয়)।
আপনার কন্ট্রোলারে নিশ্চিত হয়ে নিন যে আপনার মতো আপনার এইচটিপি বৈশিষ্ট্য রয়েছে:
[HttpPost]
নিয়ামকটিতেও বৈশিষ্ট্য যুক্ত করুন:
[ValidateAntiForgeryToken]
আপনার দৃষ্টিতে আপনার ফর্মটিতে আপনাকে লিখতে হবে:
@Html.AntiForgeryToken();
আমার এইচটিএমএল ছিল। @ চিহ্ন ব্যতীত এটি কোনও কোড ব্লকে থাকা অবস্থায় এটি রেজারে কোনও ত্রুটি দেয় নি তবে রানটাইমে এটি করেছিল। নিশ্চিত হন যে আপনি @ এইচটিএমএল.এন্টের @ সাইনটি দেখেছেন কিনা .. যদি এটি অনুপস্থিত বা না থাকে
আমার ক্ষেত্রে, ফর্মটি জমা দেওয়ার জন্য আমার এই জাভাস্ক্রিপ্টটি ছিল:
$('form').submit(function () {
$('input').prop('disabled', true);
});
এটি জমা দেওয়া ফর্মটি থেকে লুকানো অনুরোধটি যাচাইকরণ টোকেন সরিয়ে ফেলছিল। আমি এটিতে পরিবর্তন করেছি:
$('form').submit(function () {
$('input[type=submit]').prop('disabled', true);
$('input[type=text]').prop('readonly', true);
$('input[type=password]').prop('readonly', true);
});
... এবং এটা ভাল কাজ করে।
readonly
এবং গোপনীয় নিয়ন্ত্রণগুলি বাদ দিয়েছি । সুন্দরভাবে কাজ করা লাগে।
আমার ক্ষেত্রে কুকিজের জন্য ওয়েবকনফাইগে ভুল ডোমেন কারণ ছিল:
<httpCookies domain=".wrong.domain.com" />
আমার ক্ষেত্রে এটি ওয়েবকনফিগটিতে যুক্ত requireSSL=true
করার কারণে httpcookies
যা অ্যান্টিফোরজিটোকেন কাজ বন্ধ করে দিয়েছে। উদাহরণ:
<system.web>
<httpCookies httpOnlyCookies="true" requireSSL="true"/>
</system.web>
উভয় করতে requireSSL=true
এবং @Html.AntiForgeryToken()
কাজ আমি ভিতরে এই লাইন যোগ Application_BeginRequest
মধ্যেGlobal.asax
protected void Application_BeginRequest(object sender, EventArgs e)
{
AntiForgeryConfig.RequireSsl = HttpContext.Current.Request.IsSecureConnection;
}
স্বতন্ত্র ব্যবহারকারীর অ্যাকাউন্টগুলির সাথে ASP.NET এর জন্য ডিফল্ট লগইন সহ ক্রোমে এই ত্রুটিটি পেয়েছে
.cshtml:
@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
<h4>Use a local account to log in.</h4>
নিয়ন্ত্রক:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
সাইটের জন্য সাইটের ডেটা সাফ করে সমাধান করা:
বেশ কয়েকটি কন্ট্রোলারের উপর আমার ইপি সার্ভার সমাধানে সূচক ক্রিয়ায় একটি সামগ্রীআউটপুট ক্যাশে বৈশিষ্ট্য ছিল যা এইচটিপিগেটকে গ্রহণ করেছিল। এই ক্রিয়াকলাপের প্রতিটি দৃশ্যে একটি ফর্ম থাকে যা এইচটিপিপস্ট পোস্টে একই নিয়ামককে বা অন্যকে পোস্ট করে। যত তাড়াতাড়ি আমি attrib সমস্ত সূচক ক্রিয়া সমস্যাটি থেকে সেই বৈশিষ্ট্যটি সরিয়েছি।
কারণ এটি এর প্রথম অনুসন্ধানের সাথে আসে:
আমার কাছে এই সমস্যাটি কেবল ইন্টারনেট এক্সপ্লোরারে ছিল এবং সমস্যাটি কী তা বুঝতে পারে না। দীর্ঘ গল্প সংক্ষেপে এটি টোকেনের কুকি অংশটি সংরক্ষণ করছিল না কারণ আমাদের (উপ) ডোমেনটিতে এটি একটি আন্ডারস্কোর ছিল। ক্রোমে কাজ করেছেন তবে আইই / এজ এটি পছন্দ করেন নি।
এখানে অন্যান্য সমস্ত উত্তরও বৈধ, তবে তাদের মধ্যে কেউই যদি সমস্যাটি সমাধান না করে তবে প্রকৃত শিরোনামগুলি সার্ভারে প্রেরণ করা হচ্ছে তাও পরীক্ষা করা উচিত।
উদাহরণস্বরূপ, nginx এর পিছনে লোড ভারসাম্যপূর্ণ পরিবেশে, ডিফল্ট কনফিগারেশনটি সার্ভারে অনুরোধটি প্রেরণ করার আগে __RecquestVerificationsToken শিরোনামটি সরিয়ে ফেলা হয় , দেখুন: সরল এনজিনেক্স বিপরীত প্রক্সিটি কিছু শিরোনামকে ছাঁটাই করে মনে হচ্ছে seems
কখনও কখনও আপনি ফলাফলের তালিকা সহ একটি ফর্ম ক্রিয়া পদ্ধতি লিখছেন। এই ক্ষেত্রে, আপনি একটি ক্রিয়া পদ্ধতিতে কাজ করতে পারবেন না। সুতরাং একই নামের সাথে আপনার দুটি ক্রিয়া পদ্ধতি থাকতে হবে। একজনের সাথে [HttpGet]
আর একজনের সাথে[HttpPost]
গুণ ।
আপনার [HttpPost]
ক্রিয়া পদ্ধতিতে, [ValidateAntiForgeryToken]
বৈশিষ্ট্য সেট করুন @Html.AntiForgeryToken()
এবং আপনার এইচটিএমএল ফর্মটিও রেখে দিন।
আমার ক্ষেত্রে আমি একটি এজেএক্স পোস্ট করার সময় এই ত্রুটিটি পেয়েছিলাম, দেখা গেল যে __RecquestVerificationsToken মানটি কলটি পেরিয়ে যাচ্ছিল না। আমাকে ম্যানুয়ালি এই ক্ষেত্রটির মান খুঁজে পেতে হয়েছিল এবং এটিকে শেষ পয়েন্টে প্রেরিত ডেটা অবজেক্টের সম্পত্তি হিসাবে সেট করতে হয়েছিল।
অর্থাত
data.__RequestVerificationToken = $('input[name="__RequestVerificationToken"]').val();
এইচটিএমএল
<form id="myForm">
@Html.AntiForgeryToken()
<!-- other input fields -->
<input type="submit" class="submitButton" value="Submit" />
</form>
জাভাস্ক্রিপ্ট
$(document).on('click', '#myForm .submitButton', function () {
var myData = { ... };
myData.__RequestVerificationToken = $('#myForm input[name="__RequestVerificationToken"]').val();
$.ajax({
type: 'POST',
url: myUrl,
data: myData,
contentType: 'application/x-www-form-urlencoded; charset=utf-8',
dataType: 'json',
success: function (response) {
alert('Form submitted');
},
error: function (e) {
console.error('Error submitting form', e);
alert('Error submitting form');
},
});
return false; //prevent form reload
});
নিয়ামক
[HttpPost]
[Route("myUrl")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> MyUrlAsync(MyDto dto)
{
...
}
public class MyDto { public bool Whatever { get; set; } }
আমি আমার ভাগ করে নিতে চাই, আমি কৌনিক
জালিয়াতির সাথে এসপ নেটওয়্যার এমভিসি 4 ব্যবহার করে এই অ্যান্টি ফোরজিরিটোকেন টিউটোরিয়ালটি অনুসরণ করে চলেছি, তবে $ http.post ব্যবহারের জন্য আমি অনুরোধ করলেই এটি একটি ব্যতিক্রম ছুঁড়ে দেয় এবং আমি সমাধানটি খুঁজে বের করে কেবল
'এক্স- অনুরোধ-সহ ': X http.post এর শিরোনামগুলিতে ' XMLHttpRequest ' , কারণ এটি দেখতে মনে হচ্ছে(filterContext.HttpContext.Request.IsAjaxRequest())
হিসাবে স্বীকৃতি দেয় না এবং এখানে আমার উদাহরণ কোড is
App.js
var headers = {
'X-Requested-With': 'XMLHttpRequest',
'RequestVerificationToken': $scope.token,
'Content-Type': 'application/json; charset=utf-8;'
};
$http({
method: 'POST',
url: baseURL + 'Save/User',
data: JSON.stringify($scope.formData),
headers: headers
}).then(function (values) {
alert(values.data);
}).catch(function (err) {
console.log(err.data);
});
SaveController
[HttpPost]
[MyValidateAntiForgeryToken]
public ActionResult User(UserModel usermodel)
{
....