Spring社交twitter,获取的个人资料返回null电子邮件(app白名单)

时间:2016-05-19 15:08:45

标签: spring email spring-mvc twitter spring-social

我正在尝试在我的网络应用程序中添加“使用Twitter登录”。我配置了弹簧安全性和社交,一切正常,即我可以获取用户名,访问密钥,秘密等,但是当我想从获取的配置文件中获取用户电子邮件时,我将变为空。

我在控制器内部的代码(成功授权后弹簧重定向到此代码)如下所示:

Connection<A> connection = providerSignInUtils.getConnectionFromSession(request);   
String email = connection.fetchUserProfile().getEmail();

我知道你必须将应用程序列入白名单,检查“从用户请求电子邮件地址”字段,刷新令牌等等。我已经完成了所有这些并且仍然是空的。我不知道该怎么做,我试过“/ auth / twitter?scope = email”而不是“/ auth / twitter”但是没有用。也许这是Spring的错误? 我正在使用最新的spring-social 1.1.4和spring twitter API 1.1.2。

我看到很多关于这个问题的问题,但是所有这些问题都来自2011/2012年,AFAIK Twitter当时不支持从用户那里获取电子邮件地址,但它改变了,但它似乎仍然无法正常工作。 / p>

3 个答案:

答案 0 :(得分:5)

有一个关于此的公开问题。

请参阅getEmail of org.springframework.social.connect.UserProfile returns null even if additional permissions granted

作为一种解决方法,您可以使用RestTemplateTwitterTemplate获取的private TwitterTemplate twitterTemplate; [....] RestTemplate restTemplate = twitterTemplate.getRestTemplate(); String response = restTemplate.getForObject("https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true", String.class); System.out.println("Profile Info with Email: "+ response); 并暂停“https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true”。

有些事情是这样的:

functions

在我的GitHub Spring Twitter实验项目中查看此Commit以获取用户的电子邮件。

答案 1 :(得分:0)

============在Twitter应用程序管理中============

步骤1.选中“从用户请求电子邮件地址”

步骤2.Permission set ReadOnly。

============编辑您的社交登录 - 推特代码============

步骤3.TwitterProfile.java添加电子邮件字段。

步骤4.set UserTemplate.java的getUserProfile方法:

return mymodel.logo.url

步骤5.set TwitterAdapter.java的fetchUserProfile方法:

return restTemplate.getForObject(buildUri("account/verify_credentials.json?include_email=true"), TwitterProfile.class);

答案 2 :(得分:0)

使用Sanjay的答案提示

       private TwitterTemplate twitterTemplate;

       twitterTemplate = new TwitterTemplate("Your App's Consumer Key", "Your App's Consumer Secret",connection.createData().getAccessToken(), connection.createData().getSecret());

       RestTemplate restTemplate = twitterTemplate.getRestTemplate();
       String response = restTemplate.getForObject("https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true", String.class);

      JSONObject json = new JSONObject(response);
      System.out.println(json.getString("email"));