ASP.NET--QQ快速登录--SDK版
作者:互联网
C#网站实现QQ第三方登陆
说起在网站上面可以直接使用QQ登录功能大家并不陌生。但翻其官方提供的SDK包中却没有C#方向的。
但是我们有个牛人叫张善友,做了一个民间SDK。下面我们就是用他所写的SDK,进行网站添加第三方qq登录的功能。
SDK开源地址:http://opensns.codeplex.com/
一、申请账号
1.申请地址:http://connect.qq.com/。申请完毕之后会得到一个APP ID和App Key。这两个字符串会在以后配置的时候用到。
在配置文件web.config加入QQ登陆所需要的一些配置参数,如下图所示:
<configuration>
<configSections>
<sectionGroup name=”QQSectionGroup”>
<section name=”QzoneSection” type=”System.Configuration.NameValueSectionHandler,System, Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089″ />
</sectionGroup>
</configSections>
<QQSectionGroup>
<QzoneSection>
<add key=”AppKey” value=”” />
<add key=”AppSecret” value=”” />
<add key=”CallBackURI” value=”” />
<add key=”AuthorizeURL” value=”https://graph.qq.com/oauth2.0/authorize” />
</QzoneSection>
</QQSectionGroup>
AppKey是申请QQ登录成功后,分配给应用的appid;AppSecret是申请QQ登录成功后,分配给网站的appkey;
CallBackURI是QQ登陆成功后的回调地址:AuthorizeURL是QQ互联的OAth2认证地址。
2、在项目中添加三个引用Newtonsoft.Json.dll、RestSharp.dll和 QConnectSDK.dll, 在页面上放置按钮,打开qq登录的页面,然后登录成功之后回调您的网站的页面。此时如果用户在你的网站有账号,那就可以绑定现有账号,或者新注册一个账号。
下面上代码:(MVC版本的)
/// <summary>
/// QQ登陆页面
/// </summary>
[HttpGet]
public ActionResult Login(string returnUrl)
{
this.Session["return"] = returnUrl;
var context = new QzoneContext();
string state = Guid.NewGuid().ToString(“N”);
Session["requeststate"] = state;
string scope = “get_user_info,add_share,list_album,upload_pic,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,add_one_blog,add_topic,get_tenpay_addr”;
var authenticationUrl = context.GetAuthorizationUrl(state, scope);
return new RedirectResult(authenticationUrl);
}
/// <summary>
/// 回调页面
/// </summary>
public ActionResult QQConnect(LoginModel model)
{
QOpenClient qzone = null;
QConnectSDK.Models.User currentUser = null;
var verifier = Request.Params["code"];
string state1 = Session["requeststate"].ToString();
qzone = new QOpenClient(verifier, state1);
currentUser = qzone.GetCurrentUser();
if (null != currentUser)
{
return Content(currentUser.Nickname);
}
Session["QzoneOauth"] = qzone;
return View();
}
WebForm版本的:
QQ登陆页面
namespace OpenConnect.WebSample.Account
{
public partial class LoginToQQ : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
GetRequestToken();
}
private void GetRequestToken()
{
var context = new QzoneContext();
string state = Guid.NewGuid().ToString().Replace(“-“, “”);
string scope = “get_user_info,add_share,list_album,upload_pic,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,add_one_blog,add_topic,get_tenpay_addr”;
var authenticationUrl = context.GetAuthorizationUrl(state,scope);
//request token, request token secret 需要保存起来
//在demo演示中,直接保存在全局变量中.真实情况需要网站自己处理
Session["requeststate"] = state;
Response.Redirect(authenticationUrl);
}
}
}
回调页面
namespace OpenConnect.WebSample.Account
{
public partial class QQCallback : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Params["code"] != null)
{
QOpenClient qzone = null;
User currentUser = null;
var verifier = Request.Params["code"];
string state = Session["requeststate"].ToString();
qzone = new QOpenClient(verifier, state);
currentUser = qzone.GetCurrentUser();
if (null != currentUser)
{
this.result.Text = “成功登陆”;
this.Nickname.Text = currentUser.Nickname;
this.Figureurl.ImageUrl = currentUser.Figureurl;
}
Session["QzoneOauth"] = qzone;
}
}
}
用户登录之后,只会获取到用户的OpenId,OpenID和QQ号是一一对应关系。不会获取到用户的qq号码。
转:https://www.cnblogs.com/happpytoo/p/5936712.html
标签:QQ,ASP,get,state,add,qzone,NET,currentUser 来源: https://www.cnblogs.com/qcx0205/p/11629699.html