2015-08-21 10 views
6

मेरे पास एक RestAPI है जो उपयोगकर्ता को प्रमाणित करते समय मारा जाता है। यह API Android और iOS डेवलपर्स के संपर्क में है वे इस एपीआई मारा उपयोगकर्ता हमारे एप्लिकेशनएक समय में केवल एक डिवाइस से उपयोगकर्ता लॉगिन कैसे करें

मेरे आवश्यकता this.1 है) उपयोगकर्ता सेल फोन आईएमईआई "abc1234" के साथ एबीसी फोन कहना है में प्रवेश करने की अनुमति देने के लिए। वह इस फोन से लॉग इन करता है। अब अगर वह अपने दूसरे फोन से लॉग इन करने की कोशिश करता है तो उसे दूसरे फोन से लॉगिन करने की अनुमति नहीं दी जानी चाहिए। उसे पहले एबीसी डिवाइस से लॉग आउट करना चाहिए।

अब कुछ जटिलताओं 1) यदि उपयोगकर्ता एबीसी से लॉग इन है। बाहर लॉग आउट करने के साथ वह अपने फोन को प्रारूपित करता है या ऐप को अनइंस्टॉल करता है। फिर मुझे उसी डिवाइस या अन्य डिवाइस से लॉगिन कैसे संभालना चाहिए।

असल में मैं इस तरह के परिदृश्यों के लिए रणनीतियों या अच्छे प्रथाओं के बारे में जानना चाहता हूं।

+0

ऑटो लॉगआउट? प्रत्येक 5 मिनट में लॉगिन टोकन को मजबूती से समाप्त करें जब तक कि उपयोगकर्ता फोन पर कुछ कार्रवाई न करे। उस मामले में अगले 5 मिनट के लिए टोकन नवीनीकृत करें। – Rohit5k2

+1

सर्वोत्तम प्रथाओं में आपने परिस्थितियों में शामिल किया है जैसे उपयोगकर्ता का फोन गुम हो गया है और वह अभी भी लॉग इन है। लॉगिन अस्वीकार करना इस मामले में संभावित व्यवसाय का नुकसान है! मैं सभी संभावित परिस्थितियों को सूचीबद्ध करके शुरू करूंगा और जो भी सतहों के पेशेवरों और विपक्ष का वजन उठाऊंगा! –

+0

हां नरसिम्हान। ये परिदृश्य हैं जिन्हें मैं संभालना चाहता हूं। उपयोगकर्ता लॉग इन है और उसका फोन ऐप खो गया/प्रारूप/अनइंस्टॉल करता है। तो मैं इस तरह की स्थितियों को कैसे संभालेगा। एक यह है कि यदि उपयोगकर्ता दूसरे डिवाइस से लॉग इन करता है तो वह स्वचालित रूप से पहले डिवाइस से लॉग आउट हो जाता है। दूसरा समाधान यह है कि यदि वह 1 स्थान से लॉग इन है और दूसरे स्थान से बाद में लॉगिन करने की कोशिश करता है तो उसे इसके बारे में ईमेल किया जाना चाहिए। लेकिन मुझे डिवाइस आईडी को डीबी में – iGod

उत्तर

1

हैलो आप एक काम कर सकते हैं। उपयोगकर्ता लॉगिन स्थिति ट्रैक करें। जैसे

  1. उपयोगकर्ता लॉगिन प्रविष्टि है कि उपयोगकर्ता सक्रिय है जोड़ने के लिए या लॉग इन
  2. अब जबकि उपयोगकर्ता उस समय एक और डिवाइस के साथ प्रवेश करने कि उपयोगकर्ता की जाँच की कोशिश कर रहा है, जबकि है कि प्रवेश करें/सक्रिय है या नहीं। यदि उपयोगकर्ता सक्रिय है तो उन्हें लॉगिन के लिए अनुमति न दें और संदेश को प्रदर्शित करें जो आपके पुराने डिवाइस से लॉगआउट करता है। आप अंतिम डिवाइस कार्यक्षमता से ऑटो लॉगआउट भी डाल सकते हैं।
  3. जबकि उपयोगकर्ता उस समय लॉगआउट करता है उपयोगकर्ता की स्थिति सक्रिय/सक्रिय नहीं/लॉगआउट करने के लिए लॉगिन इस तरह से आप इसे प्रबंधित कर सकते हैं।

आपको एंड्रॉइड में अपनी लॉगिन वेब सेवा या एपीआई के साथ इस उपयोगकर्ता की स्थिति को पास करना होगा और वेबसाइट पर आप सीधे डीबी से जांच सकते हैं।

+0

आपके मामले में। यदि चरण 1 उपयोगकर्ता के बाद आवेदन स्वरूपित करता है तो उसकी लॉगिन स्थिति सक्रिय/लॉगिन के रूप में सेट की जाती है। फिर – iGod

+0

को लॉगआउट करने का कोई अन्य तरीका नहीं है, आप उपयोगकर्ता को अन्य डिवाइस से लॉगिन करने का प्रयास करते समय पुराने डिवाइस से लॉगआउट करने के लिए कह सकते हैं। जब आप पासवर्ड बदलते हैं तो फेसबुक और जीमेल में वे आपको पूछ रहे हैं कि "क्या आप अन्य उपकरणों से लॉगआउट करना चाहते हैं?" जैसा कि आप यह कर सकते हैं। –

+0

अच्छा विचार है, लेकिन यह मेरी आवश्यकता के अनुरूप नहीं है। – iGod

0

एक बूलियन वैरिएबल को बचाने के लिए प्रयास करें। जो 0 के रूप में चिह्नित होगा और उपयोगकर्ता को लॉगिन करने की अनुमति होगी। लॉगिन पर, मान 1 पर और लॉगआउट इसे वापस करने के लिए 0. उपयोगकर्ता परिवर्तन पर परिवर्तन हो जाएगा केवल प्रवेश करने की अनुमति दी जाएगी जब बूलियन चरित्र का मूल्य 0.

+0

आपके मामले में। यदि उपयोगकर्ता सफल लॉगिन के बाद एप्लिकेशन को प्रारूपित करता है तो उसके पास हमेशा बूलियन होगा 1. – iGod

+0

फिर बूलियन 0 को सेट करें यदि यह कुछ दिनों के लिए 1 रहता है। –

+0

तो समस्या हल हो गई? –

2



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

किसी अन्य नंबर से उपयोगकर्ता लॉगिंग के परिदृश्य के लिए, एक सक्रिय सत्र इस दूसरे लॉगिन अनुरोध को अमान्य के रूप में चिह्नित करेगा।

प्रत्येक सत्र के लिए उम्र बढ़ने की व्यवस्था रखें। इस तरह एक निष्क्रिय सत्र, फोन को डिस्कनेक्ट या बंद होने के कारण, समाप्त कर दिया जाएगा।

+0

जब उपयोगकर्ता एंड्रॉइड या आईफोन का उपयोग कर लॉग इन करता है तो मैं एक अद्वितीय सत्र कैसे बनाए रखूंगा। – iGod

+0

अद्वितीय स्ट्रिंग उत्पन्न करने के लिए आप फोन नंबर और डिवाइस imei का उपयोग कर सकते हैं। यह स्ट्रिंग इस लॉगिन द्वारा बनाए गए वर्तमान सत्र की पहचान करेगी। सफल लॉगिन के निशान के रूप में इसे उपयोगकर्ता को वापस करें। जबकि आप इसे उपयोगकर्ता आईडी के खिलाफ एक टेबल में रख सकते हैं। – g4th

8

अच्छा अभ्यास दूसरी डिवाइस से उपयोगकर्ता लॉगिन करते हैं हो सकता है और यह उपयोगकर्ता अनुभव से बेहतर होगा और साथ ही जैसे

मैं DeviceId A से लॉग-इन (अद्यतन DeviceID को संभालने के लिए आसान हो जाएगा पहली डिवाइस से उसे बाहर कर दिया जाऊँ हैं उपयोगकर्ता के खिलाफ डाटाबेस) तो में मैं DeviceId B से लॉग-इन (अगर मैं DeviceId A से अनुरोध करते हैं फिर से उपयोगकर्ता के खिलाफ DB में पिछले DeviceID)

अब अधिभावी DeviceID अद्यतन करते हैं, डीबी में DeviceID मिलान करने का प्रयास है, यह वापस आ जाएगी असत्य। उपयोगकर्ता को लॉगिन पेज पर वापस भेजें।

0

आप प्रवेश और दूसरी बार आप एप्लिकेशन को चलाने के बाद उपयोगकर्ता लॉगिन विस्तार के भंडारण के लिए SharedPreference उपयोग कर सकते हैं, जाँच करें कि लॉगिन विस्तार उपलब्ध है या नहीं। और लॉगआउट के बाद आपको साझा वरीयता को हटाना होगा।

अधिक विस्तार के लिए कृपया नीचे दिए गए लिंक पर जाएँ:

http://www.tutorialspoint.com/android/android_shared_preferences.htm समाधान के लिए http://developer.android.com/reference/android/content/SharedPreferences.html

1

उपयोग SharedPreferences,

उदाहरण के लिए।

public class Pref_Storage { 
    private static SharedPreferences sharedPreferences = null; 

    public static void openPref(Context context) { 
     sharedPreferences = context.getSharedPreferences(context.getResources().getString(R.string.app_name), 
       Context.MODE_PRIVATE); 
    } 

    public static void deleteKey(Context context, String key) { 
     HashMap<String, String> result = new HashMap<String, String>(); 

     Pref_Storage.openPref(context); 
     for (Entry<String, ?> entry : Pref_Storage.sharedPreferences.getAll() 
       .entrySet()) { 
      result.put(entry.getKey(), (String) entry.getValue()); 
     } 

     boolean b = result.containsKey(key); 
     if (b) { 
      Pref_Storage.openPref(context); 
      Editor prefsPrivateEditor = Pref_Storage.sharedPreferences.edit(); 
      prefsPrivateEditor.remove(key); 

      prefsPrivateEditor.commit(); 
      prefsPrivateEditor = null; 
      Pref_Storage.sharedPreferences = null; 
     } 
    } 

    public static void setDetail(Context context, String key, String value) { 
     Pref_Storage.openPref(context); 
     Editor prefsPrivateEditor = Pref_Storage.sharedPreferences.edit(); 
     prefsPrivateEditor.putString(key, value); 

     prefsPrivateEditor.commit(); 
     prefsPrivateEditor = null; 
     Pref_Storage.sharedPreferences = null; 
    } 

    public static Boolean checkDetail(Context context, String key) { 
     HashMap<String, String> result = new HashMap<String, String>(); 

     Pref_Storage.openPref(context); 
     for (Entry<String, ?> entry : Pref_Storage.sharedPreferences.getAll() 
       .entrySet()) { 
      result.put(entry.getKey(), (String) entry.getValue()); 
     } 

     boolean b = result.containsKey(key); 
     return b; 
    } 

    public static String getDetail(Context context, String key) { 
     HashMap<String, String> result = new HashMap<String, String>(); 

     Pref_Storage.openPref(context); 
     for (Entry<String, ?> entry : Pref_Storage.sharedPreferences.getAll() 
       .entrySet()) { 
      result.put(entry.getKey(), (String) entry.getValue()); 
     } 

     String b = result.get(key); 
     return b; 

    } 
} 

उपयोग:

पहले लॉगिन जांच login_flag:

if (Pref_Storage.checkDetail(getApplicationContext(), "login_flag")) 
{ 
    // Home Screen 
} 
else 
{ 
    //Display Login Screen 
} 

लॉग इन login_flag सेट करने के बाद: 5 मिनट के बाद

Pref_Storage.setDetail(getApplicationContext(), "login_flag", "0"); 
संबंधित मुद्दे