您的位置:首页 > 编程语言 > Go语言

Google账户登录服务

2009-10-04 22:28 197 查看
现在有些网站有了Google账户登录的功能,如下图,这样的登录方式其实对用户是有益的。只要我有个google账号,就能登录有利用Google这个登录服务的网站。此功能详解请参考

/// <summary>
/// 提供google账户的登录
/// </summary>
public class GoogleLogin : ILoginService
{
string urlAuthSubRequest = "https://www.google.com/accounts/AuthSubRequest?";
string next = ILoginService.WebsiteUrl() + "/Auth/Handle.aspx";
string scope = "http://www.google.com/m8/feeds/contacts/default/thin?max-results=0";
string urldata = "";

/// <summary>
/// 生成登录用的url
/// </summary>
/// <returns></returns>
public override string getLoginUrl()
{
return urlAuthSubRequest + "next=" + HttpUtility.UrlEncode(next) + "&scope=" + HttpUtility.UrlEncode(scope);
}

/// <summary>
/// 得到Google账户的Email地址和姓名
/// </summary>
/// <param name="page"></param>
/// <returns></returns>
public override string[] parseHandle(HttpContext page)
{
urldata = scope;
string[] ret = new string[2];
try
{
string token = page.Request["token"];
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(urldata));
request.Headers.Add("Authorization", "AuthSub token=" + token);
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

XmlDocument doc = new XmlDocument();
if (response != null)
{
string account = string.Empty, name = string.Empty;

doc.Load(response.GetResponseStream());
XmlNode node = doc.SelectSingleNode("*/*[local-name()='id']");
if (node != null)
{
account = node.InnerText; //Email地址
}
node = doc.SelectSingleNode("*/*[local-name()='author']/*[local-name()='name']");
if (node != null)
{
name = node.InnerText; //姓名
}
ret[0] = account;
ret[1] = name;
return ret;
}
else return ret;
}
catch (Exception ex)
{
new MyException("GoogleLogin", ex.ToString());
return new string[] { "", "" };
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐