ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

ASP.NET--QQ快速登录--SDK版

2019-10-07 11:04:40  阅读:349  来源: 互联网

标签:QQ ASP get state add qzone NET currentUser


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有