2015-08-21 1 views
6

У меня есть RestAPI, который при ударе аутентифицирует пользователя. Этот api выставлен разработчикам Android и ios, они попали в этот api, чтобы пользователь мог войти в наше приложение.Как сделать вход пользователя только с одного устройства за один раз

Мое требование это.1) Если у пользователя есть мобильный телефон, скажите abc phone с IMEI «abc1234». Он входит в систему с этого телефона. Теперь, если он попытается войти в систему со своего 2-го телефона, ему не разрешено входить со второго телефона. Он должен сначала выйти из устройства abc.

В настоящее время существует несколько осложнений 1) если пользователь зарегистрирован из abc. После выхода из системы он форматирует свой телефон или удаляет приложение. Затем, как я должен обрабатывать логин с того же устройства или другого устройства.

В основном я хочу знать о стратегиях или передовой практике для таких сценариев.

+0

автоматический выход из системы через 5 минут? Сильно истекает токен входа каждые 5 минут, если пользователь не выполняет какие-либо действия на телефоне. В этом случае обновите токен в течение следующих 5 минут. – Rohit5k2

+1

Лучшие практики, которые вы использовали в ситуациях, когда телефон пользователя потерян, и он все еще зарегистрирован. Запрет входа в систему явно потеряет потенциальный бизнес в этом случае! Я бы начал с перечисления всех возможных ситуаций и взвесить плюсы и минусы любых поверхностей! –

+0

да Нарасимхан. эти сценарии - вот что я ищу. пользователь вошел в систему и его телефон потерян/format/uninstalls приложение. то как я буду обращаться с такими типами ситуаций. один из них заключается в том, что если пользователь входит в систему со второго устройства, он автоматически выходит из первого устройства. Второе решение - если он зарегистрирован с 1-го места и пытается выполнить последующий логин с другого места, тогда он должен быть отправлен по электронной почте об этом. но я должен хранить идентификатор устройства в db также – iGod

ответ

1

Здравствуйте, вы можете сделать одно. Отслеживать статус входа пользователя. как

  1. в то время как пользователь Войти добавить запись, пользователь активен или войдите
  2. сейчас, когда пользователь пытается войти в систему с другим устройством в то время проверить, что пользователь является Войти/активным или нет. если пользователь активен, то не разрешайте им регистрироваться и выводить сообщение о выходе из старого устройства. Вы также можете включить автоматический выход из последних функций устройства.
  3. В то время как пользователь выходит из системы в это время, измените статус пользователя в активном состоянии/логин на неактивный/выход из системы, чтобы таким образом вы могли управлять этим.

Вы должны передать этот статус пользователя своей веб-службой входа или API в андроид и на веб-сайте, который вы можете напрямую проверить из базы данных.

+0

В вашем случае. если после шага 1 пользователь форматирует приложение, то его статус входа устанавливается как активный/логин. Тогда нет другого способа зарегистрировать его – iGod

+0

, вы можете попросить пользователя выйти из старого устройства во время попытки входа с другого устройства. как в facebook и gmail, когда вы меняете пароль, они спрашивают вас: «Вы хотите выйти с других устройств?» как вы можете это сделать. –

+0

Хорошая идея, но это не соответствует моему требованию. – iGod

0

Попробуйте сохранить логическую переменную. Который будет отмечен как 0, и пользователю будет разрешено войти в систему. При входе в системе, то значение будет изменение на 1 и на изменении выхода из системы обратно в 0. Пользователя будет разрешено только для входа, если значение булева символа 0.

+0

В вашем случае. если пользователь форматирует приложение после успешного входа в систему, он всегда будет иметь значение boolean как 1. – iGod

+0

Затем установите boolean в 0, если он остается 1 в течение нескольких дней. –

+0

Итак, проблема решена? –

2



Я предлагаю вам поддерживать сеанс для входа в систему. Всякий раз, когда есть успешный вход в систему, вы предоставляете пользователю уникальный идентификатор сеанса. Этот идентификатор сеанса может впоследствии использоваться для дальнейших запросов/вызовов от пользователя.

Для сценария входа пользователя с другого номера активный сеанс будет отмечать этот второй запрос на вход как недействительный.

Храните механизм старения для каждой сессии. Таким образом, неактивный сеанс, вызванный отключением или отключением телефона, будет прекращен.

+0

Как я могу сохранить уникальный сеанс, когда пользователь регистрируется с помощью Android или iphone. – iGod

+0

Вы можете использовать номер телефона и устройство imei для создания уникальной строки. Эта строка будет идентифицировать текущий сеанс, созданный этим логином. Верните это пользователю как знак успешного входа в систему. Хотя вы можете сохранить его в таблице против идентификатора пользователя. – g4th

8

Хорошая практика будет пусть логин пользователя из второго устройства и вышли из него с первого устройства, было бы лучше от опыта пользователя, а также будет легко обрабатывать, например

Я вошел в систему с DeviceId A (обновление DeviceId в дБ по отношению к пользователю) затем я пытаюсь войти в систему из DeviceId B (опять обновлять DeviceId перекрывая предыдущий DeviceId в дБ по отношению к пользователю)

Теперь если я делаю запрос от DeviceId A, соответствует 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:

Pref_Storage.setDetail(getApplicationContext(), "login_flag", "0"); 
Смежные вопросы