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=
C#网站实现QQ第三方登陆# C#快速开发教程的更多相关文章
- QQ第三方登陆
第一步 引入第三方登陆类,实例化,调用类中方法getInstance()跳转到授权页面 第二步 登陆成功的回调方法,qq_return则是登陆成功会获取到的数据的处理方法 qq_return方法: 本 ...
- 分享QQ第三方登陆SDK
主要是考虑到QQ的PHP SDK写的真是太烂了,纯属是普及API知识,而不是到手就可以部署的类库..反正自己都写了一个了,就拿出来分享下.. 什么也不多说,直接上代码. Qq_sdk.php < ...
- web网站使用qq第三方登录
Html代码: <a href=’/QQlogin’>qq登录</a> //后台代码: @RequestMapping(value = "/QQlogin" ...
- QQ第三方登陆示例
先上图 若想实现QQ登录,需要成为QQ互联的开发者,审核通过才可实现.注册方法可参考链接http://wiki.connect.qq.com/%E6%88%90%E4%B8%BA%E5%BC%80%E ...
- php qq第三方登陆
0.下载QQ登录(QQ互)php版:下载地址:点击打开链接(本文编写时最新版本:V2.1 ) 1.在QQ互联网站注册一个appid,配置网站地址和回调地址. 例:http://yzdd.app1101 ...
- 网站调用qq第三方登录
1. 准备工作 (1) 接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权. ① 注册QQ互联开发者账号 网址 https:/ ...
- 使用AndroidStudio快速开发教程
关于AndroidStudio的使用 参考:http://www.codes51.com/article/detail_98914.html 1.对于开发环境的通性:编写 调试 视图 一般的开发 ...
- QQ互联第三方登陆 redirect uri is illegal(100010)
想必第一次大家接触QQ第三方登陆都会遇到各种各样的问题,备受折磨,因此,今天我把自己做QQ登陆的过程描述一下,希望给大家提供参考,少走弯路. 在开发之前,我们先了解下QQ登陆的流程 第一:查看熟悉 网 ...
- 第三方登陆-qq互联
看到很多网站都有第三方登陆,使用业余时间自己也要实现一个第三方登陆的功能: 1.登陆qq互联的网站:https://connect.qq.com/index.html 2.点击头像进行资料申请 --- ...
随机推荐
- ASP.NET MVC 增强Convert用法+【分页2】
[分页2] public dynamic PageQuery() { : : ; i < data.Length; i++) ...
- oracle时间模型
Oracle在9i或者早期的版本,对于性能优化方面,主要采用命中率模型,后面的版本,也保留着命中率模型,比如在awr报告中,Instance Efficiency Percentages (Targe ...
- C# Get Desktop Screenshot ZZ
I found this feature while looking inside Graphics class and since it was so simple to use, I decide ...
- python 零散记录(七)(上) 面向对象 类 类的私有化
python面向对象的三大特性: 多态,封装,继承 多态: 在不知道对象到底是什么类型.又想对其做一些操作时,就会用到多态 如 'abc'.count('a') #对字符串使用count函数返回a的数 ...
- JavaScript高级程序设计49.pdf
HTML5事件 contextmenu事件 contextmenu事件是冒泡的,可以将事件处理程序指定到document,这个事件的目标是用户操作的元素,在兼容DOM的浏览器中使用event.prev ...
- Cogs 309. [USACO 3.2] 香甜的黄油 dijkstra,堆,最短路,floyd
题目:http://cojs.tk/cogs/problem/problem.php?pid=309 309. [USACO 3.2] 香甜的黄油 ★★ 输入文件:butter.in 输出文件 ...
- [SAN4N学习笔记]使用SysTick精准延时
一.准备工作: 将上一节搭建的LED工程复制一份,命名为"2.systick".这一节主要讲如何使用系统的SysTick节拍定时器来进行精准延时程序. 二.程序编写: S ...
- linux 多线程基础4
六.线程的作用域 函数pthread_attr_setscope和pthread_attr_getscope分别用来设置和得到线程的作用域,这两个函数的定义如下: 7. 名称:: pthread_at ...
- cat、cp命令
cat是查看文件内容, cp –cp是连目录及件文件都拷贝 cp是拷贝文件 a.txt里的内容是, abc def ghi cat a.txt |grep –v ghi 得到结果, abc def h ...
- 【Hibernate】--实体状体与主键生成策略
一.Hibernate三种状态 (1).瞬时状态(只存在Hibernate容器中,数据库中没有与之对应的记录) A.通过new实例化的实体,在没有执行save方法时. B.持久状态调用delete方法 ...