Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android客户端登录到Django服务器,如何传递crsf:|_Android_Django - Fatal编程技术网

Android客户端登录到Django服务器,如何传递crsf:|

Android客户端登录到Django服务器,如何传递crsf:|,android,django,Android,Django,我正在构建一个Android客户端应用程序来连接到Django服务器。 这里的问题是我无法登录到我的服务器:(。有什么问题,请帮助我:| 这是我的登录函数() 创建DefaultHttpClient: DefaultHttpClient httpClientStatic = new DefaultHttpClient(); 从服务器获取crsf的函数: public String getCsrfFromUrl(String url) { HttpGet httpGet = new H

我正在构建一个Android客户端应用程序来连接到Django服务器。 这里的问题是我无法登录到我的服务器:(。有什么问题,请帮助我:| 这是我的登录函数()

  • 创建DefaultHttpClient:

    DefaultHttpClient httpClientStatic = new DefaultHttpClient();
    
  • 从服务器获取crsf的函数:

    public String getCsrfFromUrl(String url) {
        HttpGet httpGet = new HttpGet(url);
    
        HttpResponse httpResponse = httpClientStatic.execute(httpGet);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();
        List<Cookie> cookies = httpClientStatic.getCookieStore().getCookies();
        if (cookies.isEmpty()) {
            Log.e("COOKIES GET ",  "Empty Cookies");
        } else {
            for (int i = 0; i < cookies.size(); i++) {
                Log.e("COOKIES GET ",  cookies.get(i).getName()+"--"+cookies.get(i).getValue());
            }
        }
        return cookies.get(0).getValue();
    }
    
    公共字符串getCsrfFromUrl(字符串url){
    HttpGet HttpGet=新的HttpGet(url);
    HttpResponse HttpResponse=httpClientStatic.execute(httpGet);
    HttpEntity HttpEntity=httpResponse.getEntity();
    is=httpEntity.getContent();
    List cookies=httpClientStatic.getCookieStore().getCookies();
    if(cookies.isEmpty()){
    Log.e(“COOKIES获取”、“空COOKIES”);
    }否则{
    对于(int i=0;i
  • 将用户名、密码、crsf发布到服务器的函数:

    public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {
    
        // Making HTTP GET request to get csrfmiddlewaretoken:
        try {
            HttpPost httpPost = new HttpPost(url);
            httpPost.setEntity(new UrlEncodedFormEntity(params));
            Log.e("JSON", "In login user 02.4");
            HttpResponse httpResponse = httpClientStatic.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
            .....
            //Next is read respone, and return json type
        }
    
    publicJSONObject getJSONFromUrl(字符串url,列表参数){
    //正在发出HTTP GET请求以获取csrfmiddlewaretoken:
    试一试{
    HttpPost HttpPost=新的HttpPost(url);
    setEntity(新的UrlEncodedFormEntity(参数));
    Log.e(“JSON”,“在登录用户02.4中”);
    HttpResponse HttpResponse=httpClientStatic.execute(httpPost);
    HttpEntity HttpEntity=httpResponse.getEntity();
    is=httpEntity.getContent();
    .....
    //接下来是readrespone,返回json类型
    }
    
  • 登录功能:

    public JSONObject loginUser(String username, String password){
        // Building Parameters
    
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("username", username));
        params.add(new BasicNameValuePair("password", password));
        csrfmiddlewaretoken = new JSONParser().getCsrfFromUrl(loginURL);
        params.add(new BasicNameValuePair("csrfmiddlewaretoken", csrfmiddlewaretoken));
        JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
        return json;
    }
    
    publicJSONObject登录用户(字符串用户名、字符串密码){
    //建筑参数
    List params=new ArrayList();
    添加(新的BasicNameValuePair(“用户名”,用户名));
    添加(新的BasicNameValuePair(“密码”,password));
    csrfmiddlewaretoken=newjsonparser().getCsrfFromUrl(loginURL);
    添加参数(新的BasicNameValuePair(“csrfmiddlewaretoken”,csrfmiddlewaretoken));
    JSONObject json=jsonParser.getJSONFromUrl(loginURL,params);
    返回json;
    }
    

  • 它仍然返回401错误anh 500状态:|。

    您是否应该通过csrf?您的android是否正在通过会话进行身份验证?如果您正在创建api,也许您应该查看不同的身份验证方案?您可以使用@csrf_豁免装饰器,因为android应用程序肯定是跨域的,所以您不应该在任何时候使用csrf不过,最佳实践似乎是使用Oauth(实际上是Oauth2)而不是基于cookie的会话。