मैं एक ASP.NET MVC/वेब एपीआई बैकएंड जहां मैं अपने Phonegap अनुप्रयोग के लिए एक फार्म प्रमाणीकरण को लागू किया है है फॉर्म्स। लॉगिन इस तरह jQuery अजाक्स कॉल के माध्यम से उन क्रेडेंशियल्स भेजकर निष्पादित होनेमुद्दे Phonegap (Android) पर प्रमाणीकरण
$.ajax({
type: "POST",
url: "/api/authentication/login",
data: JSON.stringify({ Username: username, Password: password }),
contentType: "application/json; charset=utf-8",
dataType: "TEXT",
statusCode: {
200: function (response, status, xhr) {
// successfully authenticated
Backbone.history.navigate("/", { trigger: true });
}
}
});
बैकेंड के लिए लॉग इन विधि इस प्रकार है:
[ActionName("login")]
[AllowAnonymous]
public LoginResult Login(LoginCredentials credentials)
{
// doing all kinds of things here
// if valid credentials
FormsAuthentication.SetAuthCookie(loginID, true);
return loginResult;
}
मैं अपने Web.config में यह है:
<authentication mode="Forms">
<forms
name=".ASPXAUTH"
loginUrl="/login"
defaultUrl="/home"
protection="All"
slidingExpiration="true"
timeout="525600"
cookieless="UseCookies"
enableCrossAppRedirects="false"
requireSSL="true"
>
</forms>
</authentication>
अब Android के साथ समस्या यह है कि यहाँ कुकी को ठीक ढंग सेट कर दिया जाता है और यह प्रवेश के बाद मेरी अधिकृत तरीकों पर काम करता है, लेकिन कभी कभी (अक्सर) जब मैं अनुप्रयोग को बंद करने और इसे फिर से खोलने के लिए, मुझे पता नहीं मैं कर रहा हूँ लॉग इन लॉग इन। कुकी अब और नहीं है, मैं इसे अनुरोध में नहीं देख सकता। ऐसा नहीं होना चाहिए क्योंकि मैंने टाइमआउट को 525600 पर सेट किया है। मैंने देखा है कि यह समस्या तब होती है जब मैं लॉगिन के तुरंत बाद ऐप बंद करता हूं। दूसरी तरफ अगर मैं लॉग आउट करता हूं और फिर ऐप बंद किए बिना लॉग इन करता हूं, तो कुकी ठीक से सहेजी जाती है।
लेकिन, अगर मैं रहना कुकी मिलता है, समय की सबसे लॉगआउट अजीब रूप में अच्छी तरह व्यवहार करता है। इस तरह मैं लॉगआउट अनुरोध करते हैं:
$.ajax({
type: "POST",
url: "/api/authentication/logout",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "text"
success: function (response) {
// successfully logged out
Backbone.history.navigate("api/login", { trigger: true });
}
});
बैकएंड:
[ActionName("logout")]
[AllowAnonymous]
public String Logout()
{
FormsAuthentication.SignOut();
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, "");
cookie.Expires = DateTime.Now.AddYears(-1);
HttpContext.Current.Response.Cookies.Add(cookie);
return "home";
}
अब प्रवेश के साथ समस्या के समान है, लॉगआउट पहली सफल हो रहा है और कुकी नहीं रह गया है के साथ भेजा जाता है और कोई विनती। लेकिन जब मैं ऐप बंद करता हूं और इसे फिर से खोलता हूं, तो कुकी वापस आती है और मैं फिर से लॉग इन हूं। मैं देख सकता हूं कि कुकी के समान मूल्य है जैसा कि मैंने सोचा था कि मैंने अतीत में अपना समाप्ति समय निर्धारित करके हटा दिया है।
मैं चाल के सभी प्रकार की कोशिश की है, जैसे: लॉगआउट/लॉगिन अनुरोध को क्रियान्वित लॉगिन/लॉगआउट (location.reload()
)
- अतिरिक्त पुनः लोड कई बार
- के बाद अन्य पद्धतियों की अनुरोध निष्पादित लॉगिन/लॉगआउट
- लॉगिन/लॉगआउट अनुरोध के बीच 1-10 सेकंड टाइमआउट और
- उपरोक्त के सभी प्रकार के विविधताएं के रूप में iOS और Windows Phone पर इरादा
प्रमाणीकरण काम करता है। समस्या केवल एंड्रॉइड पर होती है (किटकैट और लॉलीपॉप पर परीक्षण)। एंड्रॉइड एमुलेटर पर कोई समस्या नहीं है, लेकिन वास्तविक उपकरणों और विजुअल स्टूडियो एंड्रॉइड एमुलेटर पर यह हर समय होता है।
मैं किस दिशा में यहां से जाने के लिए पता नहीं है। क्या एंड्रॉइड वेबव्यू में कुछ ऐसा है जो इस तरह के व्यवहार का कारण बन सकता है? क्या मैं कुछ और परीक्षण कर सकता हूं? कृपया सहायता कीजिए!
मैं और अधिक जानकारी देने के लिए यदि आवश्यक हो तो बहुत खुशी हूँ।
संपादित करें: फैबियन की टिप्पणी से प्रेरित होकर, मैं लॉगआउट विधि इस के लिए बदल दिया:
FormsAuthentication.SignOut();
HttpCookie cookie = HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName];
cookie.Expires = DateTime.Now.AddYears(-1);
HttpContext.Current.Response.Cookies.Clear();
HttpContext.Current.Response.Cookies.Add(cookie);
return "home";
बजाय एक नई कुकी बनाने के बजाय, मैं जवाब में एक प्रयोग किया जाता है। काम नहीं किया।
मैंने यहां से कुछ भी कोशिश की जो मैंने यहां पाया: http://techblog.dorogin.com/2013/01/formsauthentication-gotcha-with-signout.html इससे कोई फर्क नहीं पड़ता, पथ समस्या नहीं थी। अभी भी एक समाधान की तलाश है।
किसी अन्य संस्करण: अभी भी इसके लिए समाधान नहीं ढूंढ पा रहा है। मुझे एक भयानक कामकाज करना पड़ा।
- लॉगिन: मैं लॉगिन और फिर एक डमी विधि के लिए एक अनुरोध के बाद दो पुनः लोड कर सकते हैं। यह हर बार काम करता प्रतीत होता है।
- लॉगआउट: मैं स्थानीय स्टोरेज में रखे गए ध्वज का उपयोग यह निर्धारित करने के लिए करता हूं कि उपयोगकर्ता ने लॉग आउट किया है और स्टार्टअप में लॉगआउट निष्पादित किया है। यह हमेशा कुकी को सही ढंग से हटा देता है।
मैं इन हैक्स से खुश नहीं हूं और मैं अब भी एक बेहतर समाधान की उम्मीद कर रहा हूं।
में कस्टम हेडर के माध्यम से भेजा गया था मुझे लगता है कि आप अधिक जानकारी के लिए अपने Android कोड पोस्ट करना चाहिए। – BNK
"एंड्रॉइड कोड" से आपका क्या मतलब है? मैं एक फोनगैप एप्लिकेशन के बारे में बात कर रहा हूं और सभी संबंधित जेएस कोड प्रश्न में हैं। – balzafin
मेरा मतलब है कि आप अपना वेबव्यू – BNK