आवश्यक एंटी-फर्जी फॉर्म फ़ील्ड "__RequestVerificationToken" उपयोगकर्ता पंजीकरण में त्रुटि मौजूद नहीं है


141

मैं Membership.createउपयोगकर्ता फ़ंक्शन का उपयोग कर रहा हूं , फिर निम्न त्रुटि हो रही है,

आवश्यक एंटी-फर्जी फॉर्म फ़ील्ड "__RequestVerificationToken" मौजूद नहीं है

मैं इसे कैसे ठीक करूं?

जवाबों:


218

आप [ValidateAntiForgeryToken]अपनी कार्रवाई से पहले विशेषता है। आपको @Html.AntiForgeryToken()अपने फॉर्म में भी जोड़ना चाहिए ।


11
मेरे पास एक वेब पेज है जिसमें एक ही समस्या है लेकिन पूरी चीजें सही हैं। क्या गलती है।
ConductedClever

: @ConductedClever आप ध्यान से इस लेख पर Fiddler और / या फ़ायरबग (किसी भी ब्राउज़र देव उपकरण), देखो के साथ सब कुछ (खेतों, कुकीज़) की जाँच करनी चाहिए asp.net/web-api/overview/security/...
webdeveloper

@ मुझे भी बचाया। यह काम है, लेकिन शायद ही कभी यह त्रुटि मिलती है और मुझे कोई विचार नहीं है क्यों?
क्यूमास्टर

मेरे पास सब कुछ ठीक है, मेरे परीक्षणों में यह काम करता है, एक ग्राहक की मशीन पर यह हाल तक काम करता था, लेकिन अब यह त्रुटि देता है। मुझे कोई जानकारी नहीं है की क्यों। क्या किसी को कृपया यहाँ सूचीबद्ध लोगों की तुलना में अन्य विचार हैं?
आंद्रेई डॉब्रिन

1
Html.AntiForgeryToken();काम नहीं करता !! @Html.AntiForgeryToken()कार्यों में बदल रहा है
FindOutIslamNow

78

मेरे मामले में, मेरे पास मेरे web.config में यह था:

<httpCookies requireSSL="true" />

लेकिन मेरा प्रोजेक्ट एसएसएल का उपयोग नहीं करने के लिए सेट किया गया था। उस लाइन के बारे में टिप्पणी करना या एसएसएल का उपयोग करने के लिए परियोजना को हमेशा के लिए हल करना।


3
मेरे मामले में web.config कोSSSSL की आवश्यकता थी, लेकिन पोर्ट 80 और 443 दोनों के लिए IIS बाइंडिंग थे, इसलिए https टाइप करने वाले उपयोगकर्ताओं को सही व्यवहार मिल रहा था और http टाइप करने वाले उपयोगकर्ताओं को यह त्रुटि मिल रही थी, जिससे सभी को https: /> के लिए बाध्य करने के लिए फिर से लिखना पड़ा। / {HTTP_HOST} / {R: 1} ने इसे तय किया
user1069816

धन्यवाद (मेरे मामले में IISयह बाध्यकारी था ( https » EmptyHostName » IP » 443) लेकिन इसके लिए कोई बंधन नहीं था ( https » www.mysite.com » IP » 443)। तो मैं एक साथ बाध्यकारी एक नया जोड़ा गैर खाली होस्ट नाम के लिए httpsथा कि डोमेन के बराबर और यह समस्या हल हो। मेरे पास फिर IISसे बाध्य करने के लिए सेटिंग्स http 2 httpsहैं।
RAM

61

ऐशे ही:

नियंत्रक

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult MethodName(FormCollection formCollection)
{
     ...
     Code Block
     ...
}

देखें:

@using(Html.BeginForm())
{
     @Html.AntiForgeryToken()
     <input name="..." type="text" />
     // rest
}

केवल HTML में उपयोग करने का प्रयास करें
सुब्रत सरकार

41

यह भी सुनिश्चित करें कि [HttpGet] के तहत [ValidateAntiForgeryToken] का उपयोग न करें।

  [HttpGet]
  public ActionResult MethodName()
  {
  ..
  }

1
इस उत्तर ने दूसरों को पूरक किया और मेरी समस्या को हल किया! साभार
लुकास

1
यह उत्तर मानता है कि आप किसी भी जमा किए गए डेटा को नहीं बचा रहे हैं (जो आपको HttpGet पर नहीं होना चाहिए)। यदि आप हैं, तो आपको अभी भी XSRF सुरक्षा की आवश्यकता है जो [ValidateAntiForgeryToken] प्रदान करता है।
थेले

9

कुकी सक्षम नहीं होने पर भी आपको त्रुटि प्राप्त होगी।


2
अच्छा हिट। मैं इंटरनेट एक्सप्लोरर का उपयोग कर रहा था। Chrome ब्राउज़र का उपयोग करने से मेरे लिए समस्या हल हो गई
FindOutIslamNow

इससे मेरी समस्या भी हल हो गई। Google क्रोम में कुकीज़ को सक्षम करना। साभार
वैज्ञानिक विधि

7

एक और चीज जो इसका कारण बन सकती है (बस इसमें भाग गई) निम्नलिखित है: यदि आप किसी कारण से अपने सभी इनपुट फ़ील्ड को अपने रूप में अक्षम करते हैं। यह छिपे हुए इनपुट फ़ील्ड को अक्षम कर देगा जो आपके सत्यापन टोकन को रखता है। जब फॉर्म वापस पोस्ट किया जाएगा टोकन मूल्य गायब हो जाएगा और यह त्रुटि उत्पन्न करेगा कि यह गायब है। इसलिए आपको जो कार्य करने की आवश्यकता है, वह उस इनपुट फ़ील्ड को पुन: सक्षम करना है जो सत्यापन टोकन रखता है और सब ठीक हो जाएगा।


6

अनुरोध के एक भाग के रूप में हममें से कुछ लोग फाइलें अपलोड कर रहे हैं। यदि सामग्री की लंबाई अधिक हो गई है <httpRuntime maxRequestLength="size in kilo bytes" /> और आप अनुरोध सत्यापन टोकन का उपयोग कर रहे हैं, तो ब्राउज़र 'The required anti-forgery form field "__RequestVerificationToken" is not present'अनुरोध लंबाई से अधिक संदेश के बजाय संदेश प्रदर्शित करता है ।

अनुरोध को पूरा करने के लिए बड़े मान के साथ अधिकतम मान को अधिकतम करना


5

अपने नियंत्रक में सुनिश्चित करें कि आपके पास अपनी http विशेषता है जैसे:

[HttpPost]

नियंत्रक में विशेषता भी जोड़ें:

[ValidateAntiForgeryToken]

आपके विचार पर आपके फ़ॉर्म में आपको लिखना है:

@Html.AntiForgeryToken();

मेरे पास Html.AntiForgeryToken () था; बिना कोड ब्लॉक के @ चिह्न के बिना, यह रेजर में त्रुटि नहीं देता था, लेकिन रनटाइम पर किया था। सुनिश्चित करें कि आप @ Html.Ant के @ चिह्न को देख रहे हैं .. यदि वह गायब है या नहीं


5

मेरे मामले में, मेरे पास फॉर्म जमा पर यह जावास्क्रिप्ट थी:

$('form').submit(function () {
    $('input').prop('disabled', true);
});

यह सबमिट किए जा रहे फॉर्म से छिपे हुए RequestVerificationToken को हटा रहा था। मैंने उसे बदल दिया:

$('form').submit(function () {
    $('input[type=submit]').prop('disabled', true);
    $('input[type=text]').prop('readonly', true);
    $('input[type=password]').prop('readonly', true);
});

... और यह ठीक काम किया।


जब आपने इनपुट को अक्षम किया तो आपने उस विरोधी कुंजी को कैसे प्रभावित किया?
सेर

1
@Cer - यदि आप पूछ रहे हैं कि मैंने कैसे देखा, तो मैंने फ़िडलर से अनुरोध की जाँच की और उठाया कि कुंजी नहीं भेजी जा रही है। मैंने पढ़ा है कि एचटीएमएल सबमिट्स में अक्षम नियंत्रण शामिल नहीं होंगे। इसलिए मैंने इसे बदल दिया readonlyऔर छिपे हुए नियंत्रणों को बाहर कर दिया। अच्छी तरह से काम करने लगता है।
सीन

3

अगर किसी को भी इसी कारण से त्रुटि का अनुभव होता है तो मैं इसका अनुभव करता हूं, यहां मेरा समाधान है:

अगर आप के पास था Html.AntiForgeryToken();

इसे बदलो @Html.AntiForgeryToken()


2

मेरे मामले में कुकीज़ के लिए web.config में गलत डोमेन कारण था:

<httpCookies domain=".wrong.domain.com" />

yeep! यदि आप स्थानीय कंप्यूटर प्रकार <httpCookies डोमेन = "लोकलहोस्ट" /> पर हैं, तो केवल स्थानीय कंप्यूटर कुकीज पर ही काम होगा और यदि आप अपनी साइट को अन्य मशीन पर खोलने का प्रयास करते हैं, तो आप यह दर्ज करेंगे कि यह ip (fe 192.168.1.43) है जो काम नहीं करेगा यह "लोकलहोस्ट" की तलाश में है
user3419036 3

2

मेरे मामले में यह webconfig में जोड़ने के कारण था जिसने एंटीफॉरगेरीटोकन 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;
  }

2

व्यक्तिगत उपयोगकर्ता खातों के साथ 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)

साइट के लिए साइट डेटा साफ़ करके हल:

यहां छवि विवरण दर्ज करें


ठीक है काम किया। लेकिन ऐसा बार-बार हो रहा है। फ़ायरफ़ॉक्स में एक ही परियोजना ठीक से चल रही है। मैं क्या कर सकता हूँ?
कैन

@ Can @rek क्या आपके पास एक ही डोमेन के साथ कई अलग-अलग परियोजनाएं / साइटें हैं? पूर्व लोकलहोस्ट, app.site.com और app2.site.com आदि? यह आमतौर पर इस वजह से होता है।
ओग्लास

0

कई नियंत्रकों पर मेरे EPiServer समाधान में सूचकांक कार्रवाई पर एक ContentOutputCache विशेषता थी जो HttpGet स्वीकार करता है। उन कार्यों के लिए प्रत्येक दृश्य में एक प्रपत्र शामिल था जो एक ही नियंत्रक या एक अलग से एक HttpPost कार्रवाई में पोस्ट कर रहा था। जैसे ही मैंने उन सभी इंडेक्स एक्शन समस्या से उस विशेषता को हटा दिया।


0

क्योंकि यह इस की पहली खोज के साथ आता है:

मेरे पास यह मुद्दा केवल इंटरनेट एक्सप्लोरर में था और यह पता नहीं लगा सका कि समस्या क्या थी। लंबी कहानी यह टोकन के कुकी हिस्से को नहीं बचा रही थी क्योंकि हमारे (उप) डोमेन में एक अंडरस्कोर था। क्रोम में काम किया है लेकिन IE / Edge इसे पसंद नहीं करते हैं।


0

यहां अन्य सभी उत्तर भी मान्य हैं, लेकिन यदि उनमें से कोई भी समस्या हल नहीं हुई है, तो यह भी जांचने योग्य है कि वास्तविक हेडर सर्वर में पारित किए जा रहे हैं।

उदाहरण के लिए, nginx के पीछे एक लोड संतुलित वातावरण में, डिफ़ॉल्ट कॉन्फ़िगरेशन सर्वर पर अनुरोध पारित करने से पहले __RequestVerificationToken हैडर को अलग करना है, देखें: सरल नगनेक्स रिवर्स प्रॉक्सी कुछ हेडर को स्ट्रिप करने के लिए लगता है


0

कभी-कभी आप परिणाम सूची के साथ एक फॉर्म एक्शन विधि लिख रहे हैं। इस स्थिति में, आप एक क्रिया विधि के साथ काम नहीं कर सकते। तो आपके पास एक ही नाम के साथ दो क्रिया विधियाँ होनी चाहिए। एक साथ [HttpGet]और दूसरा साथ[HttpPost] विशेषता के ।

अपनी [HttpPost]कार्य विधि में, सेट करें [ValidateAntiForgeryToken]विशेषता और @Html.AntiForgeryToken()अपने html रूप में भी रखें।


0

मेरे मामले में मुझे AJAX पोस्ट बनाते समय यह त्रुटि हो रही थी, यह पता चला कि कॉल में __RequestVerificationToken मान पार नहीं किया जा रहा था। मुझे मैन्युअल रूप से इस फ़ील्ड का मान ढूंढना था और इसे उस डेटा ऑब्जेक्ट पर एक संपत्ति के रूप में सेट करना होगा जो समापन बिंदु पर भेजा गया है।

अर्थात 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)
    {
        ...
    }

वास्तव में यदि आप अपने MyDto वर्ग की संरचना को परिभाषित करेंगे तो यह बहुत उपयोगी होगा
चंदन कुमार

वैसे मुझे यकीन नहीं है कि यह वास्तव में बहुत मददगार होगा और उदाहरण कोड अब लंबा हो गया है, तो चलिए public class MyDto { public bool Whatever { get; set; } }
बताते

-1

मैं मुझे साझा करना चाहते हैं, मैं इस विरोधी जालसाजी ट्यूटोरियल का उपयोग कर रहा हूँ asp.net mvc 4 को कोणीयज के साथ उपयोग करते हुए, लेकिन यह एक अपवाद को फेंकता है जो मैं $ http.post का उपयोग करके अनुरोध करता हूं और मुझे लगा कि समाधान सिर्फ X- जोड़ रहा है अनुरोधित-साथ ':' XMLHttpRequest ' $ $ http.post के हेडर के लिए, क्योंकि ऐसा लगता है कि (filterContext.HttpContext.Request.IsAjaxRequest()) इसे अजाक्स के रूप में मान्यता नहीं है और यहां मेरा उदाहरण कोड है।

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) { ....

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.