C#網站實現QQ第三方登陸# C#快速開發教程


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號碼。

微信號:net4k8k(做(4k+8k)+月薪的程序員)

微信名稱:net知識分享

介紹:主要以發布和分享.Net和安卓文章為主,爭做全棧開發工程師,愛學習,愛挑戰,愛編程。

打造C#入門教程。總結自己已經習得的技術體系。分享到網絡。為中國的軟件復興貢獻自己的一份力。

如有不恰當之處,還請指正。

作者:成笑笑

職業:應屆畢業生,找工作中。

本人聯系方式:cxx@chengxiaoxiao.com

我的自媒體:

GitHub:https://github.com/shellcheng

My CnBlogs:http://www.cnblogs.com/happpytoo/

今日頭條:http://toutiao.com/m5443584213/

一點資訊:http://www.yidianzixun.com/home?page=channel&id=m21753

新浪微博:http://weibo.com/5706473282/

搜狐公眾平台:http://mp.i.sohu.com/profile?xpt=NUJENDc2NjZENTIyMjlBRjk4QkIzRDczNTVFMUVFODBAcXEuc29odS5jb20=


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM