rails设计httpvalidation移动设备

我正在尝试在使用Devise gem的rails app上validation我的服务器ruby的android客户端应用程序。 但我已经尝试过http身份validation,并发布了身份validation请求,服务器只响应任何给定用户名/密码200。

我已经在用户模型中设置了config.http_authenticatable = true和:database_authenticable …

我会发布我的身份validation方法,所以你们可以看看它…

public static boolean authenticate(User user, String verb) throws IOException, JSONException { DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(verb); CredentialsProvider credProvider = new BasicCredentialsProvider(); credProvider.setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), new UsernamePasswordCredentials(user.getMail(), user.getPassword())); httpClient.setCredentialsProvider(credProvider); List nameValuePairs = new ArrayList(); nameValuePairs.add(new BasicNameValuePair("email", user.getMail())); nameValuePairs.add(new BasicNameValuePair("password", user.getPassword())); httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse httpResponse = httpClient.execute(httpPost); int statusCode = httpResponse.getStatusLine().getStatusCode(); //JSONObject resp = null; if (statusCode = 300){ throw new IOException("Error"); } return true; } 

如果服务器响应200,它听起来真的像服务器端配置,所以你应该仔细检查你的URL实际上是安全的,使用桌面Web浏览器和Fiddler之类的工具,这样你就可以看到一切。 特别注意身份validation标头和状态代码; 至少你应该从服务器上看到一个401来启动它。

您还可以在设备上打开Apache HTTP的诊断程序,它还会将标题和内容转储到LOGCAT,这样您就可以确保一切正在进行中。

检查WWW-Autnenticate标头的内容,它将指定接受哪些方案。 客户端将重新请求URL,但它会将Authorization标头放入其请求中。

简而言之,在更容易排除故障的环境中,确保您的服务器端在应用程序之外工作。

客户端,看起来您只是激活BASIC身份validation(每个人都停止使用它!),您的端点可能只需要DIGEST或NTLM或KERBEROS或任何其他身份validation方案而不是BASIC 。 由于看起来您没有为SSL设置,当然至少使用DIGEST或者您有明确的文本问题!

使用表单变量(用于身份validation)仅适用于应用程序级别,而不适用于HTTP协议级别,后者使用HTTP标头(WWW-自动validation,授权)和状态代码(401,403)进行身份validation过程。 而且,如果您没有为仅SSL配置服务器(和客户端),则会出现明显的文本问题。