我正在尝试在我的网络应用程序中添加“使用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>
答案 0 :(得分:5)
有一个关于此的公开问题。
作为一种解决方法,您可以使用RestTemplate
从TwitterTemplate
获取的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"));