У меня есть приложение для Android с регистрацией, которая отправляет регистрационную информацию через https в java rest api, которая проверяет учетные данные для входа, а затем отправляет ответ, в котором указано, был ли вход успешно. Мой вопрос прост, что я должен сделать, чтобы убедиться, что пользователю не нужно снова войти в систему при перезапуске приложения?Android, login using Rest API
ответ
Существует много способов иметь дело с однократным входом в систему, это зависит от того, как архитектура реализована на стороне сервера, чтобы заставить ее работать. Обычно API для входа - closely coupled
по соображениям безопасности. позвольте мне пример, что я имею в виду под номером closely coupled
.
Как вы хотите, чтобы Login
Mobile App
работы один раз, и в следующий раз, когда пользователь открывает Mobile app
вы не хотите, чтобы подсказать пользователь SignIn
экрана снова. и, конечно же, вы не хотите сохранять конфиденциальную информацию, такую как Username
, и Password
в мобильном приложении в качестве постоянных данных, так как его можно легко извлечь из устройства Android. так, что вы делаете.
Предположим, вы прошли регистрационные данные с deviceID
, уникальными для Android Device
. Что-то вроде показано ниже. Ниже данные JSON
отправляемые на LoginAPI
{
"username": "[email protected]",
"password": "it's not a secret",
"deviceId": "123456789"
}
Теперь, когда вы не хотите, чтобы сохранить Login
учетные данные, сервер будет генерировать случайные буквенно-цифровой String
передать его вам в ответ каждый раз при входе в Mobile Приложение.
{
"Success": true,
"SuccessMessage": "credentials are correct, really!",
"ErrorMessage": null,
"Date": "dd/mm/yyyy",
"token": "1eghe4qha23aehraeh456789" // now this is a nasty String
}
теперь вы можете сохранить date
и token
в Mobile App в качестве постоянных данных. Итак, в следующий раз, когда ваш пользователь откроет приложение, вы можете позволить пользователю обойти экран SignIn
, а в фоновом режиме вы можете проверить, правильно ли установлен идентификатор токена пользователей, отправив его на сервер, что-то вроде этого.Вы можете выбрать SharedPreferences или создать file и сохранить его там
{
"API_TYPE": "login",
"deviceId": "123456789",
"token": "1eghe4qha23aehraeh456789"
}
Сервер может проверить этот токен против deviceID
, чтобы проверить, было ли это правильный маркер для устройства и реагировать.
Вы можете спросить, почему мы снова проверяем token
, поскольку это было отправлено сервером на первом месте, указав, что учетные данные были правильными. Я согласен, что у вас есть точка, скажем, что это условие безопасности при сбое, если пользователь изменяет пароль с веб-сайта или что-то, что приводит к изменению токена на сервере для изменения этого пользователя, если сервер отрицает токен, предоставленный вы просто попросите пользователя снова войти в систему.
Это будет следить за тем, чтобы пользователь входил в систему только один Android Device
в любой данный момент времени.
Спасибо за помощь, это, кажется, лучший подход, который я видел. У меня есть один вопрос об этом, хотя, не правда ли, что слишком долго хранить токен на устройстве? Вы бы рекомендовали следующий подход каждый раз, когда пользователь возвращается в приложение после первого входа в систему: 1. Пользователь открывает приложение, идентификатор токена и устройства, сохраненный в общих настройках, отправляется на сервер 2 . Сервер проверяет идентификатор устройства и идентификатор токена с идентификатором и идентификатором идентификатора устройства, хранящимся на сервере ...... –
3. Затем сервер генерирует новый токен, и если шаг 2 был успешным, он отправляет новый токен вместе с сообщение об успешности 4. Идентификатор токена затем обновляется в общих предпочтениях с новым, полученным от сервера. Будет ли это излишним? Кроме того, вы бы порекомендовали выполнить проверку токена через ssl? –
@BenC. Вы обращаете внимание на то, что вы на самом деле выявили некоторые петлевые отверстия в этом подходе. То, что вы предложили, вызывающе может быть сделано, а также опция «SSL». Помните, что я добавил ключ «Дата», который будет предоставлен сервером в качестве ответа. Эта дата может быть использована для проверки того, когда последний раз «SignIn» прошел успешно, и вы можете аннулировать токен через 10, 20 или 30 дней и снова попросить пользователя «SignIn» –
Вы можете сохранить учетные данные после первого входа в систему. Итак, когда пользователь перезагрузит приложение, вы можете автоматически сделать запрос auth.
Вы можете выбрать оптимальный вариант для хранения учетных данных с помощью док: Data-Storage
Это просто, но, возможно, не самый лучший способ сделать это.
Если вы используете пароли в своем auth, не забудьте зашифровать перед хранением. – Adley
У меня есть один и тот же problme, и я получил данные JSON от сервера, как этого
{"error":0,"message":"ok","token":"7c75015e92e40511911e34752ee456e1","execute_time":"0.2723"}
так я держу StuToken
в SharedPreferences, и когда мой старт приложения, проверьте StuToken
существует ли она, как это
Map<String, String> loginInfo = InfoUtil.getLoginInfo(MainActivity.this);
if (loginInfo != null) {
if (loginInfo.get("StuToken") != null) {
getStuInfo(loginInfo.get("StuToken"));
Toast.makeText(MainActivity.this, "登录状态", Toast.LENGTH_SHORT).show();
} else {
initIntent(LoginActivity.class);
this.finish();
}
} else {
initIntent(LoginActivity.class);
this.finish();
}
}
надежда, что будет работает для вас
вы можете использовать общие предпочтения для хранения значений пользователя и проверить будет ли пользователь уже зарегистрирован или нет. Вы можете следить за этим Link.
Пробуйте этот код в своей деятельности SplashScreen. Вы можете сохранить значение в sharedPrefence, чтобы проверить, зарегистрирован ли пользователь или нет.
public class SplashActivity extends AppCompatActivity {
private static final long TIME_OUT_MILI = 3000;
private SharedPreferences mAppPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
mAppPreferences = AppUtil.getAppPreferences(this);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (mAppPreferences.getBoolean("is_Logged_in", false)) {
startActivity(new Intent(SplashActivity.this, MainActivity.class));
} else {
startActivity(new Intent(SplashActivity.this, LoginActivity.class));
}
finish();
}
}, TIME_OUT_MILI);
}
}
В Вашем LoginActivity делать это:
public class LoginActivity extends AppCompatActivity {
private SharedPreferences mAppPreferences;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
SharedPreferences.Editor editor = mAppPreferences.edit();
editor.putBoolean(Constants.SETTINGS_IS_LOGGED_IN, true);
editor.commit();
}
}
- 1. Liferay login using API/Webservices
- 2. Facebook Login + Rest API
- 3. Parse.com rest api login using vba возвращает «missing username»
- 4. Rails API login using curl
- 5. Access rest api using nodejs
- 6. sharepoint search using rest api
- 7. login api request using реакция и redux
- 8. Windows login using C#
- 9. Rocket Chat - Login via Rest API
- 10. Google REST API Windows Forms login
- 11. web login using VBA
- 12. Yahoo login using rvest
- 13. login using codeigniter
- 14. facebook login using SDK
- 15. FB login using Swift
- 16. PHP Login using Session
- 17. PHP login using MySql
- 18. https login using curl
- 19. Login site using casperJS
- 20. PHP login using AJAX
- 21. Django REST Framework Login
- 22. Акка Актер hotswapping using rest api
- 23. rest api using express.js и posgresql
- 24. Android REST API - Parse Server
- 25. Android DefaultHttpClient REST api
- 26. Android REST API
- 27. android - rest API timeout
- 28. Youtube search using android api
- 29. создать пользователя в hippo cms using rest api
- 30. spring security oauth2 login using database
Вы можете сделать свой API предоставить ключ идентификации, которую можно использовать для проверки подлинности пользователя для будущих запросов API. вы также можете установить действительность этого токена Auth. Для получения дополнительной информации ознакомьтесь с веб-маркером JSON. –