当前位置: 首页 > news >正文

网站实现QQ登陆功能

一、Introduction

一般网站具有使用qq登陆到本站的功能。

二、实现步骤

1.        网站在外网且有外网域名

也就是网站上线。

首先,注册一个域名。比如,到万网注册。然后,有一台服务器。买或者租。然后,安装lamp或者ln(ningx)mp环境。在www.lnmp.org上有一键安装包。

然后将域名绑定到服务器。在注册域名的网站后台,把域名绑定到服务器的ip地址。在域名列表中,点击解析。

然后,把项目上传到服务器上。配置好apache的配置文件。注意修改项目中所有文件的权限,给它们分配可写权限chmod  –R  777  xxx/。然后,将数据库文件导入到服务器的数据库 SOURCE  /home/php/xxxx.sql。然后,修改服务器上项目的配置文件,为符合服务器实际情况的,比如数据库密码,图片文件路径等。

2.        到qq官网把网站注册进去

登陆connect.qq.com,应用管理,网站接入,申请接入,注册网站域名。

注册成功后会得到APP  ID和APP  KEY。

3.        然后下载php版的sdk

下载sdk后放到根目录。

4.        修改开发包的配置文件

comm/config.php

//申请到的appid

$_SESSION["appid"]    = 123;

//申请到的appkey

$_SESSION["appkey"]   = "hahaha";

//QQ登录成功后跳转的地址,请确保地址真实可用,否则会导致登录失败。

$_SESSION["callback"]= "http://www.haha.com/qqlogin/oauth/qq_callback.php";

//QQ授权api接口.按需调用

$_SESSION["scope"]= "get_user_info,add_share,list_album,add_album,upload_pic,add_topic,add_one_blog,add_weibo";

然后在申请注册的官网中,填上配置文件中一样的回调地址。

5.        修改登陆页面的qq图标按钮,当点击登陆时弹出qq登陆窗口,直接复制提供的示例代码

复制test_oaut2_0.html中的

childWindow =window.open("oauth/qq_login.php","TencentLogin","width=450,height=320,menubar=0,scrollbars=1,resizable=1,status=1,titlebar=0,toolbar=0,location=1");

到登陆页面的qq图标点击事件。

<dd class="qq"><ahref="javascript:void(0);" onclick='childWindow =window.open("/qqlogin/oauth/qq_login.php","TencentLogin","width=450,height=320,menubar=0,scrollbars=1,resizable=1,status=1,titlebar=0,toolbar=0,location=1");'><span></span>QQ</a></dd>

点击qq登陆按钮,弹出登陆框。在qq登陆框登陆成功后,就跳转到配置文件中配置的qq_callback.php文件。

6.        跳到qq_callback.php后

跳过去后,调用了两个函数,获取登陆的qq帐号的openid并保存到session中。openid的作用是加密。

7.        将登陆的qq的openid和网站中的登陆的帐号关联起来

qq登陆成后,在小窗口关闭前,将主窗口跳转到关联帐号的页面内。修改qq_callback.php

echo"<script>opener.location.href='/index.php/Home/Member/qqlogin';window.close();</script>";

8.        编写qqlogin方法

如果没有帐号就注册,如果有就和帐号关联。修改会员表,添加qq号字段。

/**

     * qq登陆成功后,接管登陆的qq帐号,与本站帐号关联

     */

    public function qqlogin()

    {

        //取出这个openid对应的帐号

        $memberModel = D('Admin/Member');

       $memberModel->field('username')->where(array(

            'openid' => $_SESSION['openid'],

        ))->find();

        //如果有关联帐号,直接让这个帐号登陆

        if($member)

        {

            //调用login方法让其登陆

           $memberModel->$member['username'];

            //继续使用原来的login方法,修改login方法,传判断是否需要密码的参数,在login中根据传的参数判断

            if($memberModel->login(false))

            {

                //登陆成功,跳转

                $returnUrl = U('/');//默认到首页

                //从session中取出如果有保存的跳转地址

                $ru = session('returnUrl');

                if($ru)

                {

                    session('returnUrl', null);

                    $returnUrl = $ru;

                }

                $this->success('登陆成功', $returnUrl);

                exit;

            }

            else

            {

               $this->error($memberModel->getError());

            } 

        }

        else

        {

            //如果qq号还没有关联帐号就引导用用绑定一个,修改login方法,判断登陆后session中有没有openid,有就修改这个会员id的openid字段为session中的openid,然后unset掉session中的openid。

            redirect(U('login'));

        }

    }

 

相关文章:

  • dedecms
  • [one_demo_3]漩涡递增矩阵
  • CI
  • YII
  • php实现邮箱验证
  • php微信公众号开发
  • [one_demo_4]不使用第3个变量交换两个变量的值
  • [one_demo_5]命令行输入输出
  • [one_demo_6]逆置整数
  • [one_demo_7]求走到第50个台阶的走法多少种
  • [one_demo_8]十进制转二进制
  • [one_demo_9]判断数组是否递增
  • [one_demo_10]递归解决汉诺塔问题
  • [one_demo_11]二分查找法
  • [one_demo_12]递归打印*\n*.*.\n*..*..\n图形
  • Java编程基础24——递归练习
  • Kibana配置logstash,报表一体化
  • Mysql数据库的条件查询语句
  • RxJS: 简单入门
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 分类模型——Logistics Regression
  • 聊聊flink的TableFactory
  • 前端面试之闭包
  • 人脸识别最新开发经验demo
  • 三栏布局总结
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 新书推荐|Windows黑客编程技术详解
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • No resource identifier found for attribute,RxJava之zip操作符
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #NOIP 2014#Day.2 T3 解方程
  • #QT(智能家居界面-界面切换)
  • (175)FPGA门控时钟技术
  • (2022 CVPR) Unbiased Teacher v2
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (bean配置类的注解开发)学习Spring的第十三天
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (推荐)叮当——中文语音对话机器人
  • (五)c52学习之旅-静态数码管
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .htaccess配置重写url引擎
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • /bin/bash^M: bad interpreter: No such file or directory
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [Android] Upload package to device fails #2720
  • [AR Foundation] 人脸检测的流程
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [C++]类和对象(中)
  • [Json.net]快速入门