2014-10-31 111 views
0

我在webapp上实现了facebook登录。在Parse上注册Facebook用户

我收到访问令牌,我知道电子邮件,一切都很好。 但我无法在Parse数据库上注册用户。

我做了一个java bean,它有userId,userName,userEmail和token。 我把这些放在一个表格中,应该发送给Parse。

/*--------------------------FORM FACEBOOK ----------------------------*/ 
     final TextField<String> userId = new TextField<>("userId"); 
     final TextField<String> userName = new TextField<>("userName"); 
     final TextField<String> userEmail = new TextField<>("userEmail"); 
     final TextField<String> token = new TextField<>("token"); 

     model = new CompoundPropertyModel<>(new FacebookLoginForm()); 
     form = new Form<FacebookLoginForm>("tokenForm", model) 
     { 
      @Override 
      protected void onSubmit() 
      { 
       ParseUser pu = new ParseUser(); 
       pu.setUsername(model.getObject().getUserName()); 
       pu.setEmail(model.getObject().getUserEmail()); 
       /*METHOD FOR PARSE*/ 
       curlParse(model.getObject().getToken(), model.getObject().getUserId()); 

      } 
     }; 
     add(form); 

     form.add(userId); 
     form.add(token); 
     form.add(userName); 
     form.add(userEmail); 

解析curlParse():

public void curlParse(String token, String id) 
{ 
    try 
    { Date exp = new Date(); 
    exp.setTime(exp.getTime()+7200000); 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd'T'HH:MM:ss.SSS'Z'"); /*2012-02-28T23:49:36.353Z Data format*/ 
     String sExp = sdf.format(exp); 
     Request.Post("https://api.parse.com/1/users") 
       .addHeader("X-Custom-header", "stuff") 
       .bodyString(
         "{" 
         + " \"authData\": { " 
         + " \"facebook\": {" 
         + " \"id\": \""+ id +"\"," 
         + "\"access_token\": \""+ token +"\"," 
         + " \"expiration_date\": \""+sExp+"\"" 
         + " }" 
         + "}" 
         + "}", ContentType.APPLICATION_JSON 
       ) 
       .execute().returnContent().asString(); 
    } catch (IOException ex) 
    { 
     Logger.getLogger(Login2.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    } 

因为我需要一个绝对路径,通过Facebook登录的用户,我不能使用调试和有没有日志(Tomcat)的文件中的任何异常。 我试图从cURL翻译到Java,但它似乎并没有工作。 我的错误在哪里?

谢谢。

回答

0

在HTML

<form id="tokenForm" wicket:id="tokenForm" > 
     <input type="text" id="token" wicket:id="token" name="token"/> 
     <input type="text" id="userId" wicket:id="userId" name="userId"/> 
     <input type="text" id="userName" wicket:id="userName" 
     <input type="text" id="userEmail" wicket:id="userEmail" name="userEmail"/> 
     <input type="submit"id="facebookSubmit" wicket:id="facebookSubmit" name="facebookSubmit"> 
</form> 

在JS:

 function login() { 
      openFB.login(
        function (response) { 
         if (response.status === 'connected') { 
          getInfo(); 
          document.getElementById("token").value = response.authResponse.token; 

         } else { 
          alert('Facebook login failed: ' + response.error); 
         } 
        }, {scope: 'email'}); 
     } 


     function getInfo() { 
      openFB.api({ 
       path: '/me', 
       success: function (data) { 
        console.log(JSON.stringify(data)); 
        document.getElementById("userId").value = data.id; 
        document.getElementById("userEmail").value = data.email; 
        document.getElementById("userName").value = data.first_name; 
        document.getElementById("userSurname").value = data.last_name; 
        document.getElementById("facebookSubmit").click(); 
       }, 
       error: errorHandler}); 
     } 

关于java:

public void curlParse(String token, String id) 
    { 

     try 
     { 
      Date exp = new Date(); 
      exp.setTime(exp.getTime() + 7200000); 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); /*2012-02-28T23:49:36.353Z */ 

      String sExp = sdf.format(exp); 
      String resp = Request.Post("https://api.parse.com/1/users") 
        .addHeader("X-Parse-Application-Id", CWSApplication.getParseDotComApplicationID()) 
        .addHeader("X-Parse-REST-API-Key", CWSApplication.getParseDotComApplicationKey()) 
        .addHeader("Content-Type", "application/json") 
        .bodyString(
          "{" 
          + " \"authData\": { " 
          + " \"facebook\": {" 
          + " \"id\": \"" + id + "\"," 
          + "\"access_token\": \"" + token + "\"," 
          + " \"expiration_date\": \"" + sExp + "\"" 
          + " }" 
          + "}" 
          + "}", ContentType.APPLICATION_JSON 
        ) 
        .execute().returnContent().asString(); 

      /*System.out.println(ResponseParse);*/ 
      CWSSession session = (CWSSession) getSession(); 
      ParseUser loggedUser = new ParseUser(); 
/*questo con la libreriagson ci legge il JSON che ha i dati che ci servono da mettere su Parse*/ 
      try 
      { 
       JsonReader reader = new JsonReader(new StringReader(resp)); 

       reader.beginObject(); 

       while (reader.hasNext()) 
       { 

        String name = reader.nextName(); 

        if (name.equals("objectId")) 
        { 
         loggedUser.setObjectId(reader.nextString()); 

        } else if (name.equals("sessionToken")) 
        { 
         loggedUser.setSessionToken(reader.nextString()); 

        } else 
        { 
         reader.skipValue(); //avoid some unhandle events 
        } 
       } 

       reader.endObject(); 
       reader.close(); 

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