2015-10-26 9 views
10

मैं एक Xamarin.Forms एप्लिकेशन है, और मुझे अपने प्रमाणीकरण फेसबुक और Azure के आधार पर सुविधाओं को लागू करना चाहते हैं। प्रमाणीकरण ही काम करते हैं, लेकिन मैं जिस तरह से यह से बुनियादी उपयोगकर्ता की जानकारी प्राप्त करने के लिए नहीं मिला है (नाम, ईमेल ...)एक Azure मोबाइल वेब ऐप में मूल उपयोगकर्ता जानकारी कैसे प्राप्त करें?

var user = await DependencyService.Get<IMobileClient>() 
      .LoginAsync(MobileServiceAuthenticationProvider.Facebook); 

सर्वर साइड

var mobileAppUser = (MobileAppUser)User; 
var facebookCredentials = 
    user.GetIdentityAsync<FacebookCredentials>().Result; 

mobileAppUser मौजूद है पर, लेकिन facebookCredentials है हमेशा शून्य

Azure पर मेरे बैकएंड एक नया मोबाइल वेब .net में लिखा एप्लिकेशन है। इस प्रमाणीकरण प्रश्न को छोड़कर, इसकी सभी सुविधाएं महान काम कर रही हैं। मुझे सर्वर की तरफ या क्लाइंट साइड पर इस समस्या को हल करने का उचित तरीका नहीं मिला। Pls। ध्यान दें, मेरा सवाल Azure मोबाइल ऐप्स के नए तरीके के बारे में है, पुराने क्लासिक नहीं।

तुम इतनी मेरी मदद करने के लिए तरह होगा? किसी नमूना कोड या दस्तावेज का गर्मजोशी से स्वागत है।

अग्रिम धन्यवाद!

+0

मैं अगर यह आपकी मदद कर सकता पता नहीं है, लेकिन मुझे लगता है यह कर सकते हैं: http: // www। azurefromthetrenches.com/how-to-using-facebook-to- प्रमाणीकरण-with-web-api-2-in-a-native- मोबाइल- appplication/ या http://blogs.msdn.com/b/carlosfigueira/archive /2012/10/25/getting-user-information-on-azure-mobile-services.aspx या http://stackoverflow.com/questions/25463125/azure-mobile-service-with-facebook-auth-get-user -इन्फो। मुझे आशा है कि वे आपको समाधान के लिए ड्राइव कर सकते हैं। सौभाग्य। –

+0

धन्यवाद मेरे दोस्त मैंने इन दस्तावेज़ों सहित कई दस्तावेज़ पढ़े, लेकिन उन्होंने मेरी समस्या हल करने में मदद नहीं की। – Tom

+2

आपका स्वागत है। मुझे दुख है कि उन्होंने आपकी मदद नहीं की, शुभकामनाएं। –

उत्तर

0

एक async का उपयोग करते हुए कहते हैं आपको इंतजार करना चाहिए आपरेशन पूरा हो गया है और पूरा होने के बाद परिणाम उपलब्ध हो जाएगा। आप कई तरह से यह कर सकते हैं लेकिन इस मामले में सबसे स्वाभाविक होगा:

var facebookCredentials = await user.GetIdentityAsync<FacebookCredentials>(); 
// Here you can use your facebookCredentials variable: 
+0

कार्य के परिणाम की प्रतीक्षा करना भी पूरा होने की प्रतीक्षा करता है। – Tom

+2

हां, आप सही हैं। अभी भी एक कोशिश के लायक है। कार्यान्वयन विवरण कभी नहीं जानते। –

+0

बहुत बहुत धन्यवाद, मैंने इसे कई अन्य छोटी चीजों की तरह पहले कोशिश की। – Tom

5

भी एक टिप्पणी के लिए लंबे समय तक

आप GetIdentityAsync के कार्यान्वयन की जाँच करते हैं, तो आपको निम्नलिखित दिखाई देगा :

  • यह जाँच करता है, तो उपयोगकर्ता को प्रमाणीकृत किया जाता है (आप ने कहा कि कोई समस्या नहीं है इसलिए यहाँ उपयोगकर्ता प्रमाणीकृत किया जाता है)
  • से पढ़ता है "EMA_RuntimeUrl" config (यह रिक्त नहीं है, क्योंकि तब आप एक अपवाद मिल चाहते हैं)
  • यह जाँच लें कि प्रदाता से टोकन मान्य है या नहीं। यदि नहीं, तो यह null देता है।

मेरा मानना ​​है कि इस मुद्दे पर आप में चल रहे हैं। इस मुद्दे पर एक त्वरित खोज आपको this SO प्रश्न पर लाती है।

तो क्या आपने एप्लिकेशन प्रॉपर्टीज में एज़ूर पोर्टल में मोबाइल ऐप में मैन्युअल रूप से एक EMA_RuntimeUrl बनाया है, और गेटवे पता को असाइन किया है?

+0

धन्यवाद! EMA_RuntimeUrl सेटिंग्स स्वचालित रूप से बनाई जाती हैं, जब मैंने Azure में ऐप बनाया था। मैंने कुछ भी नहीं बदला। इसका मूल्य गेटवे यूआरएल है, और जब ब्राउज़र में यह यूआरएल खोलता है, तो यह कहता है कि 'गेटवे ऊपर है'। – Tom

+0

तो, मुझे लगता है कि यह सेटिंग ठीक है, और मेरी समस्या अभी भी मौजूद है। – Tom

+1

यह निश्चित रूप से कॉन्फ़िगरेशन समस्या की तरह लगता है। आपका कोड सही है। तो बिना किसी अतिरिक्त जानकारी के कुछ भी कहना मुश्किल होगा। [यह] (https://github.com/Azure/azure-content/blob/master/articles/app-service-mobile/app-service-mobile-dotnet-backend-migrating-from-mobile-services.md# प्रमाणीकरण-विचार) माइग्रेशन सहायता का उल्लेख है कि "प्रत्येक प्रदाता के लिए अतिरिक्त रीडायरेक्ट यूआरआई के रूप में गेटवे/साइनइन- * एंडपॉइंट्स जोड़ें।" और एक _ [AZURE.NOTE] _ है, जो फेसबुक के लिए भी लागू हो सकता है। – Tamas

0

अच्छा, मुझे नहीं पता कि यह वास्तव में मदद कर सकता है, लेकिन मैं कोशिश करूंगा। जैसा कि मैं समझता हूं, आप इसके लिए फेसबुक मिडलवेयर के साथ एएसपीनेट पहचान का उपयोग कर रहे हैं। मैं इसका भी उपयोग करता हूं, लेकिन फेसबुक के बजाय google oauth midware के साथ। यदि मैं सही हूं, तो यह समाधान

यदि ऐसा है, तो जब आप मिडलवेयर के साथ प्रमाणीकरण अनुरोध करते हैं तो आपने कॉलबैक यूआरएल निर्दिष्ट किया है जिसे आपको अपने प्रदाता (फेसबुक) के साथ सफल प्रमाणीकरण प्रक्रिया के बाद पुनर्निर्देशित किया जाएगा। बाहरी प्रमाणीकरण के लिए पूछने के लिए आप निर्दिष्ट यूआरएल के साथ ChallangeResult पर कॉल करें। जब आप इस कॉलबैक पर पहुंचे, तो आप विधि IAuhtnticationManager इंटरफ़ेस से अपनी कॉलबैक विधि में पहले चरण के रूप में उपयोग कर सकते हैं। IAuthenticationManager उदाहरण प्राप्त करने के लिए आप HttpContext.GetOwinContext().Authentication संपत्ति पढ़ सकते हैं।इस के बाद आप IIdentity कार्यान्वयन के रूप में उपयोगकर्ता के बारे में सभी आवश्यक जानकारी प्राप्त कर सकते हैं - GetExternalLoginInfoAsync() रिटर्न ExternalIdentity उदाहरण

आशा में मदद करता है कि

संबंधित मुद्दे