QQ登录

6 篇文章 0 订阅
5 篇文章 0 订阅

这是我的页面结构,其中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" οnclick="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技术交流


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值