網站使用QQ登陸


上幾天我朋友說他知道怎么實現網站使用QQ號登陸或者注冊了,於是要他發給我學習,感覺好復雜,而且運行不了(主要萬原因是因為這東西得上傳到空間是實驗),於是在博客園找了相關的資料,發現在也並不是很復雜的,比他的簡單多了。

首先請到這里下載最新版本的SDK:http://opensns.codeplex.com/

SDK依賴於Newtonsoft.Json和RestSharp兩個程序集,具體可以參考使用RestSharp 庫消費Restful Service。 主要是兩個類QzoneContext(QQ登陸的上下文數據)  和 QOpenClient (QQ互聯API入口),其他類主要是模型,配置類。

我這里新建的項目是在.net framwork 4.0,請你轉換成 .net framwork 4.0,否則可能會出錯,運行不了

1、你得去http://connect.qq.com/ 申請一個賬號,會得到一個APP ID和App Key,這兩個東東會在生成請求的時候用到。你的去填一些資料,還要提交一些資料審核。

在配置文件web.config加入QQ登陸所需要的一些配置參數,下面的代碼請加到如下圖選中的地方

 

<sectionGroup name="QQSectionGroup">
<section name="QzoneSection" type="System.Configuration.NameValueSectionHandler,System, Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089"/>
</sectionGroup>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</configSections>
<QQSectionGroup>
<QzoneSection>
<add key="AppKey" value="*******"/><!--這里這填上你在http://connect.qq.com/manage/注冊后獲得的APP ID-->
<add key="AppSecret" value="*****************"/><!--這里填上注冊后的APP KEY-->
<add key="CallBackURI" value="http://www.xxxx.cn"/><!--注冊時寫的回調地址-->
<add key="AuthorizeURL" value="https://graph.qq.com/oauth2.0/authorize"/>
</QzoneSection>
</QQSectionGroup>
<appSettings>
<!--<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
<add key="DaoType" value="Codingwell.DevText.SQLDAL" />-->
<add key="appKey" value="*************"/><!--這里如上面一樣-->
<add key="appSecret" value="*******************"/>
<add key="callbackUrl" value="http://www.xxxxxxxxx.cn"/>
<add key="SmtpHost" value="smtp.gmail.com"/>
<add key="SmtpUser" value=""/>
<add key="SmtpPassword" value=""/>
<add key="EnableSsl" value="true"/>
<add key="SslPort" value="587"/>
</appSettings>

 

AppKey是申請QQ登錄成功后,分配給應用的appid;AppSecret是申請QQ登錄成功后,分配給網站的appkey;CallBackURI是QQ登陸成功后的回調地址(回調地址就是你在申請QQ時如下圖中的填寫的回調地址);AuthorizeURL是QQ互聯的OAth2認證地址。

(此圖是因為向前一步是幸福發消息給我說:“CallBackURI這個回調網址所指的是什么啊”,所以特加上圖解釋,如其他朋友也有什麼不懂的,請給我留言,或者加上面的QQ群問我!)

在項目中添加上面下載的SDK文件夾中三個引用Newtonsoft.Json.dll、RestSharp.dll和 QConnectSDK.dll, 在頁面上放置按鈕,打開qq登錄的頁面,然后登錄成功之后回調您的網站的頁面。此時如果用戶在你的網站有賬號,那就可以綁定現有賬號,或者新注冊一個賬號。如果你是新建站,也可以完全使用qq登錄來作為用戶體系。

 登陸頁面:

using QConnectSDK.Context;//請加入這個命名空間

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);

}


}

回調頁面:

View Code
using QConnectSDK;//請加入這個命名空間
using QConnectSDK.Models;
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;
}
}
}
本地測試
  • 前提准備,了解本地Host文件的作用
  1. 找到C:\WINDOWS\system32\drivers\etc\hosts這個文件
  2. 用文本方式打開
  3. 增加一行:127.0.0.1 www.****.com 你注冊時寫的網址,不是回調地址(不過也許你的回調地址和你的網址一樣,也是可以的)這就是所謂的域名劫持,嘿嘿!
  4. 啟動本地服務器
  5. 啟動瀏覽器訪問 http://www.****.com/

參考博文:http://www.cnblogs.com/shanyou/archive/2012/02/05/2338797.html

http://www.devtext.com/blogs/detail/43/devtext-com-source-code 以及這個網站提供下載的網站源碼。

本示例Demo下載地址:http://files.cnblogs.com/koeltp/%E7%BD%91%E7%AB%99%E4%BD%BF%E7%94%A8QQ%E7%99%BB%E9%99%86.rar


免責聲明!

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



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