2012-04-24 23 views
10

मैं एक ऑटो-लॉगिन फ़ंक्शन का उपयोग करना चाहता हूं। तो जब उपयोगकर्ता ऐप खोलता है, तो उसे "लॉगिन स्क्रीन" में भेज दिया जाता है। जब वह सफलतापूर्वक लॉग इन हुआ तो उसे अपने खाते में निर्देशित किया जाना चाहिए। मैं इसे "खाता स्क्रीन" कहता हूं। अब जब उपयोगकर्ता ऐप को पुनरारंभ करता है, तो उसे "लॉगिन स्क्रीन" को देखे बिना सीधे अपने खाते में निर्देशित होना चाहिए।आईओएस: लॉगिन के बाद उपयोगकर्ता को प्रमाणीकृत कैसे करें (ऑटो लॉगिन के लिए)?

लॉगिन फ़ंक्शन पहले से ही मेरे प्रोजेक्ट में ठीक काम करता है (उपयोगकर्ता नाम और पासवर्ड UserDefault में सहेजे जाते हैं), लेकिन जब भी मैं ऐप बंद करता हूं, मुझे फिर से लॉगिन करना होगा। तो मेरा सवाल है: उपयोगकर्ता को स्वचालित रूप से लॉगिन कैसे करें? या बेहतर कहा: मैं कैसे जांचूं कि डेटा (UserDefault में सहेजा गया) डेटाबेस (MYSQL) जैसा ही है?

+2

मुझे नहीं पता कि क्या आप से पूछना करने की कोशिश कर रहे हैं पुनः प्राप्त किये है ... – BastiBen

+0

बस उपयोगकर्ता नाम में "लॉगिन" बूल नामक एक टैग सेट करें, फिर जब आप – adali

+1

को ऐप करते हैं तो इसे पहचानें क्योंकि आप उपयोगकर्ता में लॉगिन जानकारी संग्रहीत कर रहे हैं, यह जांचने में समस्या क्या है कि ये जानकारी मौजूद है या नहीं और यदि ऐसा नहीं है तो प्रवेश पट ?? –

उत्तर

0

प्रश्न का उत्तर देने के लिए: यदि आप कीचेन डेटा के साथ स्वत: लॉगिन करना चाहते हैं, तो मुक्त फ्रेमवर्क "SFHFKeychainUtils" का उपयोग करें। यह keychain में उपयोगकर्ता नाम, पासवर्ड और servicename बचाता है। यदि आप इसे पुनर्प्राप्त करना चाहते हैं, तो बस उपयोगकर्ता नाम को NSUserDefaults में सहेजें और आप आसानी से पासवर्ड प्राप्त कर सकते हैं।

ये हम चले:

SiFi HiFi फ्रेमवर्क:https://github.com/ldandersen/scifihifi-iphone/tree/master/security

SiFi Hifi फ्रेमवर्क (एआरसी संगत):https://stackoverflow.com/a/10348964/1011125

SFHFKeychainUtils उपयोग कैसे करें:http://gorgando.com/blog/technology/iphone_development/simple-iphone-tutorial-password-management-using-the-keychain-by-using-sfhfkeychainutils

+0

कॉपी पोस्ट करते समय सावधान रहें और बॉयलरप्लेट/वर्बैटिम कई प्रश्नों के उत्तर पेस्ट करें, इन्हें समुदाय द्वारा "स्पैमी" के रूप में फ़्लैग किया जाना चाहिए। यदि आप ऐसा कर रहे हैं तो आमतौर पर इसका मतलब है कि प्रश्न डुप्लिकेट हैं इसलिए उन्हें इसके बजाय ध्वजांकित करें। – Kev

+0

ठीक है, धन्यवाद। मैं अगली बार इसे ध्यान में रखूंगा .. – filou

22
  1. पहली बार जब उपयोगकर्ता लॉगिन, आप उपयोगकर्ता iPhone की-चेन में प्रमाणिकता को सहेजने।
  2. जब ऐप फिर से खोला जाता है, तो आप जांचते हैं कि क्या उपयोगकर्ता प्रमाण-पत्र कुंजीचैन में मौजूद हैं और यदि हां, तो आपको कोड तर्क लॉगिन करना चाहिए और लॉगिन लॉगिन के बाद स्क्रीन पर जाना चाहिए और स्क्रीन पर जाना चाहिए। यदि नहीं, तो आपको लॉगिन स्क्रीन दिखाना चाहिए। आप इस तर्क को AppDelegates एप्लिकेशनडिडफिनिश लॉन्चिंग में कर सकते हैं।
  3. जब भी उपयोगकर्ता लॉगआउट बटन पर क्लिक करता है, तो कुंजीचैन से उपयोगकर्ता प्रमाण-पत्र हटाएं, और लॉगिन नियंत्रक पर वापस जाएं।

बस जब आप लॉग इन करते हैं तो उपयोगकर्ता कुंजी लॉग इन करते हैं और उपयोगकर्ता इसे लॉगआउट बटन पर क्लिक करने के बाद ही इसे हटा देता है। यदि उपयोगकर्ता लॉगआउट के बिना ऐप छोड़ देता है तो क्रेडेंशियल अभी भी कीचेन में होंगे और जब आप ऐप पर वापस आते हैं तो आप उन्हें पुनर्प्राप्त कर सकते हैं।

संपादित करें: मुझे लगता है कि मैं अपनी प्रवेश तर्क thing..If एक और जोड़ना होगा समय (आप की तरह वेब अनुरोध या कुछ का उपयोग कर लॉगिन), आपके लॉगिन ViewController में लॉगिन तर्क कोड डाल बजाय ApplicationDelegate, और उपयोग लेता है ऑटो लॉगिन प्रक्रिया के दौरान कोई गतिविधि संकेतक।

संपादित करें: मैंने पूरे उत्तर को संपादित किया, एनएसयूसर डीफॉल्ट को कीचेन के साथ बदल दिया। This धागा बताता है क्यों।

+0

इस स्पष्ट उत्तर के लिए आपको बहुत बहुत धन्यवाद। "लॉगिन तर्क" के साथ आपका क्या मतलब है? – filou

+1

@SaschaWieland यदि आपके लॉगिन के लिए किसी भी वेब अनुरोध/प्रतिक्रिया की आवश्यकता है तो इसमें समय लगेगा। लॉगिन तर्क से मैं बस वास्तविक लॉगिन प्रक्रिया का मतलब है। – Krishnabhadra

2

उपयोगकर्ता नाम और पासवर्ड को सहेजते समय, एनएसयूसर डीफॉल्ट की बजाय कीचेन में सहेजने की अत्यधिक सलाह दी जाती है। बेहतर समझने के लिए इस post का संदर्भ लें।

+0

मैंने चाबी का उपयोग किया, लेकिन क्या आप मुझे बता सकते हैं कि कीचेन डेटा के साथ ऑटोलॉगिन कैसे करें? एक autologin के लिए श्रृंखला से डेटा प्राप्त करना बहुत भारी है .. – filou

+0

मुझे लगता है कि आपने पहली बार उपयोगकर्ता नाम पासवर्ड प्रमाणीकृत करने के लिए एक webservice का उपयोग किया है। प्रत्येक लगातार लॉन्च पर, अपने कीचेन से उपयोगकर्ता नाम और पासवर्ड चुनें और उपयोगकर्ता को प्रमाणीकृत करने के लिए उसी webservice का उपयोग करें। प्रमाणीकरण करते समय, आप उपयोगकर्ता को सूचित करने के लिए एक लोडिंग स्क्रीन प्रदर्शित कर सकते हैं। – Roshit

+0

यदि आप कोड '[keychainItem setObject: @ "password" के लिए कोड का उपयोग करके कीचेन में विवरण सेट करते हैं: KSecValueData]; [keychainItem setObject: @ "username" forKey: kSecAttrAccount]; ', फिर आप 'NSString * password = [keychainItem objectForKey: kSecValueData] का उपयोग करके विवरण पुनर्प्राप्त कर सकते हैं; एनएसएसटींग * उपयोगकर्ता नाम = [keychainItem ऑब्जेक्टफोरकी: केएसईएएएएएआरएएएआरएआरएसीएटीएटीए;; – Roshit

0

मैंने एन के संयोजन का इस्तेमाल किया SUSerDefaults और एसएसकेचेन। मैंने पासवर्ड स्टोर करने के लिए उपयोगकर्ता नाम nad SSKeychain को स्टोर करने के लिए NSUserDefaults का उपयोग किया।

इस कोड मैं साख

NSString *user = self.username.text; 
NSString *password = self.pass.text; 
[SSKeychain setPassword:password forService:@"achat" account:user]; 
NSUserDefaults *dUser = [NSUserDefaults standardUserDefaults]; 
[dUser setObject:user forKey:@"user"]; 
[dUser synchronize]; 

इस को बचाने के लिए प्रयोग किया जाता है कोड मैं साख

NSUserDefaults *eUser = [NSUserDefaults standardUserDefaults]; 
NSString *savedUser = [eUser objectForKey:@"user"]; 

    if (!savedUser) { 
     UIAlertView *uhoh = [[UIAlertView alloc] initWithTitle:@"Oops!" message:@"Please enter your username and password." delegate:self cancelButtonTitle:@"Okay" otherButtonTitles:nil, nil]; 
     [uhoh show]; 
    } 

    else { 
      NSString *savedPass = [SSKeychain passwordForService:@"achat" account:savedUser]; 
      self.username.text = savedUser; 
      self.pass.text = savedPass; 
     } 
संबंधित मुद्दे