2012-04-12 192 views
1

我对OAuth Arena和Google ApI非常陌生,但我想在此实现的目标非常简单。访问令牌后访问Google API获取个人资料

用户点击谷歌连接按钮和我的web服务应该能够让所有的用户资料信息从谷歌服务器:

我已经写代码来获得的accessToken(我还没有测试它),但是假设工作正常,现在我应该如何让Google API给我用户配置文件?我在GoogleConsumer类中看到名为Get Contacts的静态函数,但我没有看到获取profiledata的任何选项。可能有我缺少的东西?

这里使用我的代码,我得到的accessToken:

IConsumerTokenManager tokenManager = 
           new LocalTokenManager(consumerKey,consumerSecret); 
var googleConsumer = 
       new WebConsumer(GoogleConsumer.ServiceDescription, tokenManager); 
var tokenResult = googleConsumer.ProcessUserAuthorization(); 
return tokenResult.AccessToken; 

现在,我如何得到用户的个人资料出来的吗?

+0

大家好,我不知道为什么enyone还没有触及这个问题。如果我缺乏任何信息,请告诉我。基本上,我惊奇地发现,所有这些WebConsumer(GoogleConsumer和TwitterConsumer)都具有getContacts,UpdateStatus和PostBlog等所有复杂功能,但没有像GetProfile这样的基本功能。我在网上看到的所有示例实际上都会得到USerprofile gy在Google的webservice URL上调用GET,但我没有看到任何演示如何使用GoogleWebConsume检索userProfile的内容。是不可能的? – TeaLeave 2012-04-17 19:43:21

+0

不[此SO帖子](http://stackoverflow.com/questions/7130648/get-user-info-via-google-api)回答你的问题? – shrisha 2012-04-18 00:01:27

+0

嗯,这篇文章说我们可以使用https://www.googleapis.com/auth/userinfo.profile作为范围。这个范围恰好适用于哪里?我是否在RequestAuthorization Call上使用它?因为我试图把这个URL放在上面,但它不需要字符串参数。 – TeaLeave 2012-04-18 01:28:11

回答

2

一旦你有你ACCESS_TOKEN(访问类型下线;和范围/权限设置,以便您可以获取用户信息),你可以试试下面的(未测试,请让我知道如果发生任何错误):

string userInfo = ""; 

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(action); 
     HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 
     StreamReader sr = new StreamReader(resp.GetResponseStream()); 
     userInfo = "https://www.googleapis.com/oauth2/v1/userinfo?access_token=" + "YOUR_ACCESSTOKEN"; 
     sr.Close(); 

      JObject jsonResp = JObject.Parse(userInfo); 
      string info=""; 
      info += "<h3>" + jsonResp.Root["name"] + "</h3>"; 
      info += "<img src='" + jsonResp.Root["picture"] + "' width='120'/><br/>"; 
      info += "<br/>ID : " + jsonResp.Root["id"]; 
      info += "<br/>Email : " + jsonResp.Root["email"]; 
      info += "<br/>Verified_email : " + jsonResp.Root["verified_email"]; 
      info += "<br/>Given_name : " + jsonResp.Root["given_name"]; 
      info += "<br/>Family_name : " + jsonResp.Root["family_name"]; 
      info += "<br/>Link : " + jsonResp.Root["link"]; 
      info += "<br/>Gender : " + jsonResp.Root["gender"]; 

Response.Write(info); 

流程:请求获取访问令牌的google userinfo url,获取响应并显示信息。

+0

那么,我现在没有mu visual studio,我会在一个小时左右尝试,但是只是想让你知道我在一个不在WEB应用环境中的web服务环境。这会工作吗? – TeaLeave 2012-04-19 15:01:11

+0

如果用户已经登录(因为他们应该是因为你有访问令牌),那么它应该没问题。请仔细检查您是否拥有登录用户,并确定了所有范围/权限。让我知道。 – 2012-04-19 15:09:25

+1

我认为你的代码是非常有用的,我可以使用它,而一旦我有accessToken。实际上,我正在研究获取请求令牌的逻辑(稍微落后于计划)。一旦我实施它,我会保持更新。 – TeaLeave 2012-04-19 16:50:31

1

让我知道您对使用GET方法访问个人资料的Google信息有什么看法,这里描述的是https://developers.google.com/+/api/latest/people/get? 这是我的C#示例。

string urlGoogle = "https://www.googleapis.com/plus/v1/people/me"; 
 
HttpWebRequest client = HttpWebRequest.Create(urlGoogle) as HttpWebRequest; 
 
client.Method = "GET"; 
 
client.Headers.Add("Authorization", "Bearer " + accessToken); 
 
      
 
using (HttpWebResponse response = (HttpWebResponse)client.GetResponse()) 
 
{ 
 
    using (Stream dataStream = response.GetResponseStream()) 
 
    { 
 
      using (StreamReader reader = new StreamReader(dataStream)) 
 
      { 
 
       if (response.StatusCode == HttpStatusCode.OK) 
 
       { 
 
        var json = new JavaScriptSerializer(); 
 
        var data = json.Deserialize<IDictionary<string, object>>(reader.ReadToEnd()); 
 
    //....... here in data you have all json fields for the profile

+0

您的代码片段似乎没有正确格式化。您可能希望删除一些缩进。 – ne1410s 2014-12-13 14:51:01

相关问题