2012-04-12 189 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

相關問題