Я пробовал и искал много ответов здесь и на других веб-страницах, но я трачу весь день и до сих пор не могу этого сделать.Django CSRFTOKEN и проблемы с клиентом android
Друг строит бэкэнд django, и он просит меня создать приложение для Android, чтобы подключиться к этому бэкэнду, лучшим результатом было это Android Client login to a Django server, how to pass crsf :|, но я не могу заставить его работать, я получаю CSRF с сервера, но потом я попробуйте использовать URLConnection, HttpClient, HttpPost, множество других примеров и ничего.
Сейчас мой код:
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://URL-TO-SERVER/");
String CSRFTOKEN = getCsrfFromUrl("http://URL-TO-SERVER/");
// Add your data
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("username", mEmail));
nameValuePairs.add(new BasicNameValuePair("password", mPassword));
nameValuePairs.add(new BasicNameValuePair("csrfmiddlewaretoken", CSRFTOKEN));
try {
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httppost.setHeader("X-CSRFToken", CSRFTOKEN);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
final BasicCookieStore cookieStore = new BasicCookieStore();
BasicClientCookie csrf_cookie = new BasicClientCookie("X-CSRFToken", CSRFTOKEN);
csrf_cookie.setDomain("URL-SERVER");
cookieStore.addCookie(csrf_cookie);
// Create local HTTP context - to store cookies
HttpContext localContext = new BasicHttpContext();
// Bind custom cookie store to the local context
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
// Execute HTTP Post Request
HttpResponse response = null;
try {
Log.e(TAG,"Token: "+CSRFTOKEN);
response = httpclient.execute(httppost, localContext);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(response.getAllHeaders());
try {
System.out.println(EntityUtils.toString(response.getEntity()));
} catch (IOException e) {
e.printStackTrace();
}
и getCsrfFromUrl() находится по ссылке. И в
nameValuePairs.add(new BasicNameValuePair("csrfmiddlewaretoken", CSRFTOKEN));
Я попытался изменить ключ для csrftoken, для X-CSRFToken и я до сих пор не знаю, что это неправильно или как я могу получить его работу, может быть, проблема в интерфейсе? Отсутствует функция или ключ? Что я пытаюсь сделать, это войти на страницу, где мне нужно указать имя пользователя и пароль, а затем вспомнить ответ, чтобы узнать, кто входит и работает с этими данными.
Функция 'getCsrfFromUrl' из другого вопроса не работает. – aumo
См. Http://stackoverflow.com/questions/22660848/android-with-django-how-to-keep-user-logged-in – Othman