Fotonick
@Fotonick
android-er (Навальный отменит налоги фрилансерам)

Что не так с авторизацией приложения на сайте?

Есть мой сайт. На этом сайте у меня есть 2 профиля. В профиле 1 пароль чисто цифры. В профиле 2 - цифры и буквы.
Я в приложении реализовал экспорт в логи получаемого после авторизации html кода и заголовков.
После входа с профилем 2 в логи не записывается никакой хтмл, есть только заголовки
null=[HTTP/1.1 200 OK]
Connection=[keep-alive]
Content-Type=[text/html; charset=UTF-8]
Date=[Tue, 21 Jul 2015 12:00:20 GMT]
Server=[nginx/1.4.2]
Transfer-Encoding=[chunked]
X-Android-Received-Millis=[1437480008658]
X-Android-Response-Source=[NETWORK 200]
X-Android-Selected-Transport=[http/1.1]
X-Android-Sent-Millis=[1437480008569]
X-Powered-By=[PHP/5.3.20]


При авторизации профилем 2 с неправильным паролем или профилем 1 хоть с правильным, хоть с неправильным паролем я получаю хтмл-код страницы входа (типа "неправильный пароль, попробуйте еще") и заголовки

null=[HTTP/1.1 200 OK]
Cache-Control=[no-store, no-cache, must-revalidate, post-check=0, pre-check=0]
Connection=[keep-alive]
Content-Type=[text/html; charset=UTF-8]
Date=[Tue, 21 Jul 2015 12:04:17 GMT]
Expires=[Thu, 19 Nov 1981 08:52:00 GMT]
Pragma=[no-cache]
Server=[nginx/1.4.2]
Set-Cookie=[PHPSESSID=fkpjh1iqqe6hjcscn9555rjqj3; path=/]
Transfer-Encoding=[chunked]
X-Android-Received-Millis=[1437480246346]
X-Android-Response-Source=[NETWORK 200]
X-Android-Selected-Transport=[http/1.1]
X-Android-Sent-Millis=[1437480246255]
X-Powered-By=[PHP/5.3.20]


Я в общем-то не понимаю что происходит. Почему оба профиля при входе с их правильным паролем не ведут себя одинаково?
Я отправляю для авторизации строку такого типа "login=user&password=123456&submit=Войти"
Почему профиль с чисто цифровым паролем не входит, а логин с цифро-буквенным входит (ну пока что я так воспринимаю отсутствие хтмл-кода страницы авторизации)?

Вот так получаю логин пароль из полей ввода
username = mUsername.getText().toString();
password = mUserPassword.getText().toString();

Вот так отправляю
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true); // Triggers POST.
connection.setDoInput(true);
String LoginOut = "login="+username+"&password="+password+"&submit=Войти";
DataOutputStream dStream = new DataOutputStream(connection.getOutputStream());
dStream.writeBytes(LoginOut);
dStream.flush();
dStream.close();
  • Вопрос задан
  • 402 просмотра
Пригласить эксперта
Ответы на вопрос 2
gadfi
@gadfi
https://gamega.org
Если не против я вас немного покритикую )
1. login/password не должны передаваться в параметрах, для этого вы и используете post, шлите в теле
2. не нужно дергать из клиента кнопку, клиент не должен знать что у вас на фронтенде

Сделайте простое rest api и не играйтесь с html, по логике на авторизацию вам нужен токен и еще какая то информация на ваше усмотрение (чаще всего шлют какую то информацию о профиле чтобы сразу было с чем работать, например имя, логин, аватарка)

для сервера на php мне нравится микрофремворк slim
для клиента рекомендую использовать связку retrofit + gson
пример все вместе www.androidhive.info/2014/01/how-to-create-rest-ap...
Ответ написан
Комментировать
@svsanek
1. Если не прошла авторизация, меняйте статус HTTP!!!! Не шлите странице со словами "о боже мой, вы ошиблись" и статус 200, Шли просто ответ со статусом 403 например.
Вообще нужно понимать, что андройд приложение - это не браузер. И данные ему нужно слать как можно более удобные. Самый лучший универсальный вариант - REST сервисы.
Если не понимаешь, как REST работает - посмотри как делают single page application например с помощью angularjs
Либо на courcera есть шикарный курс - про написание бэкэнда для андройд девайсов.
В дополнение к предыдущему ответу
помимо токенов - посмотри еще на remember me.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы