Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
java中的Facebook oauth身份验证仅返回用户名和id_Java_Facebook_Oauth - Fatal编程技术网

java中的Facebook oauth身份验证仅返回用户名和id

java中的Facebook oauth身份验证仅返回用户名和id,java,facebook,oauth,Java,Facebook,Oauth,我正在尝试通过facebook api和java获取用户详细信息和oauth authenticate user,并能够进行身份验证和重定向到我的主页,但facebook api没有返回电子邮件、生日、好友列表等详细信息,只返回用户名和id,其余详细信息为空。我已经在facebook上注册了我的应用程序,但仍然无法获取其他详细信息,如生日、电子邮件、好友列表、个人资料图片等 代码如下: 这是主菜单类: public class MainMenu extends HttpServlet {

我正在尝试通过facebook api和java获取用户详细信息和oauth authenticate user,并能够进行身份验证和重定向到我的主页,但facebook api没有返回电子邮件、生日、好友列表等详细信息,只返回用户名和id,其余详细信息为空。我已经在facebook上注册了我的应用程序,但仍然无法获取其他详细信息,如生日、电子邮件、好友列表、个人资料图片等

代码如下:

这是主菜单类:

 public class MainMenu extends HttpServlet {

    private static final long serialVersionUID = 1L;
    private String code="";

    public void service(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {      


         String clientId = "XXXXXXXXXXXXXXXXX";
         String clientSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        //public static final String REDIRECT_URI = "http://localhost:8080/Facebook_Login/fbhome";

        Client client = new Client(clientId, clientSecret);
        FacebookFactory facebookFactory = new FacebookFactory(client);
        String redirectURL = facebookFactory.getRedirectURL("http://localhost:8080/Facebook_Login/fbhome", Display.POPUP, Permission.EMAIL, Permission.OFFLINE_ACCESS);
        String code = req.getParameter("code");
        OAuthAccessToken accessToken1;
        try {
            accessToken1 = facebookFactory.getOAuthAccessToken(code, "http://localhost:8080/Facebook_Login/fbhome");

        Facebook facebook = facebookFactory.getInstance(accessToken1);
        User fbUser = facebook.getCurrentUser();



        System.out.println("fbUser"+"====="+fbUser.getName());

        ServletOutputStream out = res.getOutputStream();
        res.reset();
        out.println("<h1>Facebook Login using Java</h1>");
        out.println("<h2>Application Main Menu</h2>");
        out.println("<div>Welcome "+fbUser.getName());
        out.println("<div>Your Religion: "+fbUser.getReligion());
        out.println("<div>Your Birthday: "+fbUser.getBirthday());

        out.println("<div>Your Gender: "+fbUser.getGender());
        out.println("<div>Your Locale: "+fbUser.getLocale());

        out.println("<div>Your ID: "+fbUser.getWork());
        out.println("<div>Logout: "+"<a href='https://www.facebook.com/logout.php?next="+"http://localhost:8080/Facebook_Login/fbhome&access_token="+accessToken1+"'>Logout"+"</>");

        //out.println("<div>Your Education: "+fbUser.home(facebook));
        Map<String, String> fbProfile = new HashMap<String, String>();
        JSONObject json = new JSONObject(fbUser);
        try {
            fbProfile.put("id", json.getString("id"));
            System.out.println("fbProfile"+fbProfile);
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }






        } catch (FacebookException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();


        }



        /*out.println("<div>You are "+fbProfileData.get("gender"));
        out.flush();*/

    }

}
public类主菜单扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
私有字符串代码=”;
公共无效服务(HttpServletRequest-req、HttpServletResponse-res)
抛出ServletException,IOException{
字符串clientId=“XXXXXXXXXXXXXX”;
字符串clientSecret=“xxxxxxxxxxxxxxxxxxxxxxxx”;
//公共静态最终字符串重定向_URI=”http://localhost:8080/Facebook_Login/fbhome";
客户端=新客户端(clientId,clientSecret);
FacebookFactory FacebookFactory=新的FacebookFactory(客户端);
字符串重定向URL=facebookFactory.getRedirectURL(“http://localhost:8080/Facebook_Login/fbhome“、Display.POPUP、Permission.EMAIL、Permission.OFFLINE\u访问);
字符串代码=req.getParameter(“代码”);
OAuthAccessToken accessToken1;
试一试{
accessToken1=facebookFactory.getOAuthAccessToken(代码,“http://localhost:8080/Facebook_Login/fbhome");
facebookFactory.getInstance(accessToken1);
用户fbUser=facebook.getCurrentUser();
System.out.println(“fbUser”+“==”+fbUser.getName());
ServletOutputStream out=res.getOutputStream();
res.reset();
println(“使用Java登录Facebook”);
out.println(“应用程序主菜单”);
out.println(“欢迎”+fbUser.getName());
out.println(“您的宗教:+fbUser.getreligation());
out.println(“您的生日:+fbUser.getbirth());
out.println(“您的性别:+fbUser.getGender());
println(“您的语言环境:+fbUser.getLocale());
println(“您的ID:+fbUser.getWork());
out.println(“注销:+”

默认情况下,graph API不会返回所有字段,因此我认为您使用的库不允许您请求更多字段

您可以使用控制台进行测试


所以你做错了什么,但是因为你没有告诉我们你在做什么,我们帮不了你现在你可以查看代码了,请建议!
!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Java Facebook Login</title>
</head>
<body style="text-align: center; margin: 0 auto;">
    <div
        >
        <a href="<%=fbConnection.getFBAuthUrl()%>"> <img
            style="margin-top: 138px;" src="./img/facebookloginbutton.png" />
        </a>
    </div>
</body>
</html>
$ fbapi '/v2.8/me'
{
  "name": "Yuri Schimke",
  "id": "zzzzzz"
}

$ fbapi '/v2.8/me?fields=name,email,birthday,picture&debug=all'
{
  "name": "Yuri Schimke",
  "email": "www@xxxx.zz",
  "birthday": "xx/xx/xxxx",
  "picture": {
    "data": {
      "is_silhouette": false,
      "url": "https://scontent.xx.fbcdn.net/v/t1.0-1/p50x50/xxxx.jpg"
    }
  },
  "id": "xxxx",
  "__debug__": {}
}