无法使用谷歌将用户登录到Dropbox

Aus*_*tin 9 java dropbox dropbox-api google-oauth

我正在构建一个允许与Dropbox交互的应用程序.我已成功通过身份验证,Dropbox正在使用默认登录页面返回密钥和模板.但是,当我尝试使用Dropbox for Google选项进行身份验证时,Dropbox会返回用户密钥,但是它不会返回模板ID,而是会返回太多的模板错误.

任何帮助,将不胜感激.

这是我的代码

    public void authUrl(HttpServletRequest request)
{
    DbxWebAuth webAuth = new DbxWebAuth(requestConfig, appInfo);
    HttpSession session = request.getSession(true);
    String sessionKey = "dropbox-auth-csrf-token";
    DbxSessionStore csrfTokenStore = new DbxStandardSessionStore(session, sessionKey);

    DbxWebAuth.Request authRequest = DbxWebAuth.newRequestBuilder()
            .withRedirectUri(redirectUri, csrfTokenStore)
            .build();
    String authorizeUrl = webAuth.authorize(authRequest);
    url =authorizeUrl;
}
public String getTemplate()
{
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost post = new HttpPost("https://api.dropboxapi.com/2/file_properties/templates/add_for_user");
    post.addHeader("Authorization","Bearer "+code);
    post.addHeader("Content-Type", "application/json");
    try {
        HttpEntity entity = new StringEntity(json);
        post.setEntity(entity);
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
    HttpResponse response = httpclient.execute(post);
    HttpEntity entity = response.getEntity();
    System.out.println(response.getStatusLine().getStatusCode());
    if (entity != null) {
        InputStream instream = entity.getContent();
        try {
            Scanner s = new Scanner(instream).useDelimiter("\\A");
            String result = s.hasNext() ? s.next() : "";
            System.out.println(result);
            System.err.println(result);
            return result;
        } finally {
            instream.close();
        }

    }
    }catch(Exception e)
    {
        e.printStackTrace();
    }

    return null;
}
public String authcode(HttpServletRequest request)
{
     DbxWebAuth auth = new DbxWebAuth(requestConfig, appInfo);
    String sessionKey = "dropbox-auth-csrf-token";
    HttpSession session = request.getSession(true);
     DbxSessionStore csrfTokenStore = new DbxStandardSessionStore(session, sessionKey);


     DbxAuthFinish authFinish;
     try {
         authFinish = auth.finishFromRedirect(redirectUri, csrfTokenStore, request.getParameterMap());
     } catch (DbxWebAuth.BadRequestException ex) {
         System.out.println("On /dropbox-auth-finish: Bad request: " + ex.getMessage());

         return "failed";
     } catch (DbxWebAuth.BadStateException ex) {
         System.out.println(ex.getMessage());
         // Send them back to the start of the auth flow.

         return "failed";
     } catch (DbxWebAuth.CsrfException ex) {
         System.out.println("On /dropbox-auth-finish: CSRF mismatch: " + ex.getMessage());
         //response.sendError(403, "Forbidden.");
         return "failed";
     } catch (DbxWebAuth.NotApprovedException ex) {
         // When Dropbox asked "Do you want to allow this app to access your
         // Dropbox account?", the user clicked "No".
         //...
         return "failed";
     } catch (DbxWebAuth.ProviderException ex) {
         System.out.println("On /dropbox-auth-finish: Auth failed: " + ex.getMessage());
         //response.sendError(503, "Error communicating with Dropbox.");
         return "failed";
     } catch (DbxException ex) {
         System.out.println("On /dropbox-auth-finish: Error getting token: " + ex.getMessage());
         //response.sendError(503, "Error communicating with Dropbox.");
         return "failed";
     }
     String accessToken = authFinish.getAccessToken();
     code =accessToken;
     return accessToken;
}
Run Code Online (Sandbox Code Playgroud)

笔记

  1. 我正在使用在谷歌应用引擎服务器上运行的java来完成此身份验证.

  2. 日志中的确切错误文本是

{"error_summary":"too_many_templates/...","error":{".tag":"too_many_templates"}}

连同错误409.

如果您需要更多信息,请随时询问