QQ登录

来源:互联网 发布:淘宝网商家中心 编辑:程序博客网 时间:2024/04/30 03:28

这是我的页面结构,其中login.aspx页面上有QQ登录按钮,然后引用官方的js,还有根据api写的获取登录后用户信息的js.login.aspx登录页截图。

引用官方js,然后设置一个登录后需要返回的路径data-redirecturi,下面引用的QQLogin.js里面主要写了判断是否登录成功,以及获取信息。代码在下面。

 function QQLoginTrue() {             var openid; //登录成功获取openid,             var accesstoken; //获取accessToken             var qqsex;             var qqnickname;             //获取当前登录用户的Access Token以及OpenID             if (QC.Login.check()) {//如果已登录                 QC.Login.getMe(function (openId, accessToken) {                     //从页面收集OpenAPI必要的参数。get_user_info不需要输入参数,因此paras中没有参数                     var paras = {};                     //用JS SDK调用OpenAPI                     QC.api("get_user_info", paras).success(function (s) {//指定接口访问成功的接收函数,s为成功返回Response对象                         //成功回调,通过s.data获取OpenAPI的返回数据                         //alert("获取用户信息成功!当前用户昵称为:" + s.data.nickname + "当前用户头像地址:" + s.data.figureurl + "性别:" + s.data.gender + "");                         //qqnickname = s.data.nickname;                         //qqsex = s.data.gender;                     }).error(function (f) {//指定接口访问失败的接收函数,f为失败返回Response对象                         //失败回调                         alert("获取用户信息失败!");                     }).complete(function (c) {//指定接口完成请求后的接收函数,c为完成请求返回Response对象                         //完成请求回调                         qqnickname = c.data.nickname;                         qqsex = c.data.gender;                         //alert("openId:用户身份的唯一标识。建议保存在本地,以便用户下次登录时可对应到其之前的身份信息,不需要重新授权。值为:" + openId + " accessToken:表示当前用户在此网站/应用的登录状态与授权信息,建议保存在本地。值为:" + accessToken);                         openid = openId;                         accesstoken = accessToken;                         //这里可以调用自己的保存接口                         //alert("openid:"+openid +"accesstoken"+ accesstoken +"昵称:"+ qqnickname +"性别:"+ qqsex);                         //判断当前登录的QQ用户是否已经绑定,已经绑定则直接跳转至个人中心,未绑定则保存记录                         $.ajax({                             type: "POST",                             url: "CheckQQ.ashx",                             data: { "Command": "QQSave", "openId": openid, "accessToken": accesstoken, "QQNickName": qqnickname, "QQSex": qqsex },                             error: function (data) { alert("" + data + "") },                             success: function (data) {                                 if (data == "Bound") {                                     location.href = "/Home/Default.aspx";                                 } else if (data == "UserNOFail") {//账号异常,未查询到                                     alert("没有与此QQ绑定的账号!");                                     location.href = "/home/Register.aspx";                                 } else if (data == "ParmNull") {//QQ登录参数有空值                                     alert("请重新登录QQ");                                     QC.Login.signOut();                                     location.reload();                                 } else if (data == "saveSuccess"|| data=="WaitBind") {//等待绑定                                     location.href = "/home/QQBind.aspx";                                 }                             },                             async: true,                             dataType: "text"                         });                     });                 });             }         }    //调用QC.Login方法,指定btnId参数将按钮绑定在容器节点中    QC.Login({        //btnId:插入按钮的节点id,必选        btnId: "qqlogin",        //用户需要确认的scope授权项,可选,默认all        scope: "all",        //按钮尺寸,可用值[A_XL| A_L| A_M| A_S|  B_M| B_S| C_S],可选,默认B_S        size: "B_M"    },function (reqData, opts) {//登录成功        //根据返回数据,更换按钮显示状态方法      QQLoginTrue();        var dom = document.getElementById(opts['btnId']),       _logoutTemplate = [        //头像 '<span><img src="{figureurl}" class="{size_key}"/></span>',          //昵称            '<span>{nickname}</span> | ',        //退出            '<span style="cursor:pointer" onclick="javascript:QC.Login.signOut();">退出</span>'       ].join("");        dom && (dom.innerHTML = QC.String.format(_logoutTemplate, {nickname: QC.String.escHTML(reqData.nickname), //做xss过滤            figureurl: reqData.figureurl        }));    },function (opts) {//注销成功       location.reload();    } );


登录返回页   QQLoginBack.aspx

QQLoginBack.aspx页面是登录返回页,这个页面上引用上官方js,其中data-callback属性设为true,会关闭模拟窗口,然后返回原始页。



这样选择用户登录后,模拟窗口后关闭,然后返回Login.aspx页面,此时login.aspx页面上的js会判断是否已经登录,登录成功后会执行你要的操作。

我上面的js里判断登录成功后获取用户信息,会去查询是否与此网站绑定过,如果没有绑定过,会跳转另外一个页面去绑定QQ,如果绑定过,就会直接登录成功,然后转入个人中心。



欢迎加群交流.Net技术交流


原创粉丝点击