dede会员如何实现QQ登录绑定?

99ANYc3cd6
预计阅读时长 22 分钟
位置: 首页 DEDE建站 正文

这通常通过集成QQ互联(QQ登录)的API来实现,整个过程主要分为申请开发者资质配置网站修改DedeCMS程序三个步骤。


第一步:申请QQ互联开发者资质并获取配置信息

这是最关键的一步,你需要向腾讯申请,让你的网站能够合法地使用QQ登录功能。

  1. 访问QQ互联官网

  2. 注册/登录账号

    你需要有一个QQ账号,并使用这个QQ账号登录QQ互联平台,如果是个人开发者,直接登录即可;如果是企业,需要完成企业认证。

  3. 创建应用

    • 登录后,在开发者后台找到 “应用管理” -> “网站应用” -> “创建应用”
    • 选择 “网站” 类型的应用。
    • 填写应用信息:
      • 应用名称:给你的网站起一个名字,我的个人博客”。
      • 应用领域:选择一个最符合你网站类型的领域,如“博客/空间”。
      • 应用官网:填写你网站的网址。
      • 平台信息:选择“PC网站”或“移动网站”,并填写对应的网址。
      • 回调域这是非常重要的一步! 填写你的网站会员登录成功后,QQ会跳转回来的页面地址,这个地址必须是完整的URL,http://www.yourdomain.com/member/qq_callback.php,我们稍后会在DedeCMS中创建这个文件。
  4. 提交审核

    填写完所有信息后,提交审核,审核通常需要1-3个工作日,审核通过后,你的应用才会生效。

  5. 获取AppID和AppKey

    • 审核通过后,在你的应用详情页面,你可以找到 “应用标识” (AppID)“应用密钥” (AppKey),这两个值是后续配置DedeCMS的核心凭证,请务必复制并妥善保存。

第二步:在DedeCMS中创建必要的文件

我们需要创建一个用于处理QQ登录回调的PHP文件。

  1. 找到会员目录

    • 通过FTP或文件管理器,登录你的网站服务器,找到DedeCMS的 /member/ 目录。
  2. 创建 qq_callback.php 文件

    • /member/ 目录下,新建一个名为 qq_callback.php 的文件。
    • 将下面这段代码复制并粘贴到 qq_callback.php 文件中。
    <?php
    /**
     * QQ登录回调处理页面
     * 本文件由DedeCMS QQ登录插件自动生成
     */
    require_once '../include/common.inc.php';
    require_once '../include/memberlogin.class.php';
    require_once '../include/qconnect.class.php'; // 确保这个类文件存在,如果不存在需要创建
    // 检查是否是通过QQ回调过来的
    if (isset($_GET['code'])) {
        // 实例化QQConnect类
        $qc = new QC();
        // 获取Access Token
        $access_token = $qc->qq_callback();
        // 获取OpenID
        $openid = $qc->get_openid();
        // 使用Access Token和OpenID获取用户信息
        $userInfo = $qc->get_user_info();
        // 检查用户信息是否获取成功
        if ($userInfo && isset($userInfo['nickname'])) {
            // 在这里编写你的用户同步或登录逻辑
            // 1. 检查数据库中是否已存在该OpenID的用户
            // 2. 如果存在,则直接登录
            // 3. 如果不存在,则创建一个新用户,并关联OpenID
            // --- 示例逻辑 (需要根据你的数据库结构调整) ---
            $uid = 0;
            $query = "SELECT mid FROM `dede_member` WHERE `openid` = '{$openid}'";
            $row = $dsql->GetOne($query);
            if ($row) {
                // 用户已存在,直接登录
                $uid = $row['mid'];
            } else {
                // 用户不存在,创建新用户
                $pwd = md5(time()); // 生成一个随机密码
                $email = $userInfo['nickname'] . '@qq.com'; // 使用QQ昵称作为邮箱前缀(示例,可自定义)
                $username = $userInfo['nickname'];
                // 调用DedeCMS的会员注册函数
                $regtime = time();
                $spacesta = 0;
                $email = preg_replace("#[ \t\r\n\,;]#", "", $email);
                $sql = "INSERT INTO `dede_member` (`mtype`, `userid`, `pwd`, `uname`, `sex`, `email`, `scores`, `money`, `point`, `matt`, `face`, `safequestion`, `safeanswer`, `jointime`, `joinip`, `logintime`, `loginip`) VALUES ('个人', '{$username}', '{$pwd}', '{$username}', '{$userInfo['gender']}', '{$email}', '0', '0', '0', '0', '{$userInfo['figureurl_qq_1']}', '0', '', '{$regtime}', '{$cfg_ml->GetIP()}', '{$regtime}', '{$cfg_ml->GetIP()}');";
                if ($dsql->ExecuteNoneQuery($sql)) {
                    $newid = $dsql->GetLastID();
                    // 同步到会员空间表
                    $inquery = "INSERT INTO `dede_member_space` (`mid`, `spacename`, `sign`, `bbs`) VALUES ('{$newid}', '{$username}', '', '0');";
                    $dsql->ExecuteNoneQuery($inquery);
                    $uid = $newid;
                }
            }
            // 如果成功获取到用户ID,则登录
            if ($uid > 0) {
                $ml = new MemberLogin();
                $ml->loginSuccess($uid); // 登录成功
                ShowMsg('登录成功,正在跳转...', '../index.php', 0, 1);
                exit();
            }
        }
    }
    // 如果发生错误,跳转到登录页
    ShowMsg('QQ登录失败,请重试。', 'login.php', 0, 1);
    exit();
    ?>

注意:上面的代码中用到了 qconnect.class.php,你可能需要自己创建这个类来处理QQ的API请求,一个更简单的方法是使用现成的第三方DedeCMS QQ登录插件,这些插件通常已经封装好了所有逻辑,你只需要配置AppID和AppKey即可。


第三步:修改DedeCMS模板和配置

这一步是在页面上添加“QQ登录”的按钮,并确保它能正确跳转到QQ的授权页面。

  1. 准备QQ登录图标

    • 从QQ互联官网下载官方的QQ登录图标,并上传到你的网站模板目录下,/templets/default/images/
  2. 修改登录页面模板

    • 打开你的登录页面模板文件,通常位于 /templets/default/login.htm
    • 在你希望显示QQ登录按钮的位置(在用户名密码输入框下方),添加以下HTML代码:
    <div class="other-login">
        <p>使用第三方账号登录:</p>
        <a href="javascript:void(0);" onclick="location.href='{dede:global.cfg_memberurl/}/connect.php?op=login&ref={$ref}';">
            <img src="{dede:global.cfg_templets_skin/}/images/qq_login.png" alt="使用QQ登录" />
        </a>
    </div>
    • 说明
      • qq_login.png 是你刚才上传的图标,请确保路径正确。
      • connect.php 是一个需要我们创建的文件,用于发起QQ登录请求。
  3. 创建 connect.php 文件

    • /member/ 目录下,创建一个名为 connect.php 的文件。
    • 这个文件的作用是调用 qconnect.class.php 中的方法,生成QQ登录的授权URL,并跳转过去。
    <?php
    /**
     * DedeCMS QQ登录入口
     */
    require_once '../include/common.inc.php';
    require_once '../include/qconnect.class.php'; // 同样,这个类需要存在
    $qc = new QC();
    $qc->qq_login(); // 此方法会直接跳转到QQ的授权页面
    ?>

推荐方案:使用现成的插件

手动修改代码比较繁琐,且容易出错,特别是处理各种边界情况和安全性问题。强烈推荐使用现成的DedeCMS QQ登录插件

使用插件的优势:

  • 简单快捷:通常只需要上传插件文件,然后在后台进行简单的配置(填写AppID和AppKey)即可。
  • 功能完整:插件已经封装了从发起登录、获取信息、创建用户、自动登录到退出的所有逻辑。
  • 安全稳定:成熟的插件经过了大量用户的测试,比个人编写的代码更安全、更稳定。
  • 易于维护:当QQ官方接口更新时,插件作者通常会更新插件,你只需要升级即可。

如何找到插件:

  1. DedeCMS官方市场:登录你的DedeCMS后台,在“模块” -> “DedeCMS应用中心”中搜索“QQ登录”。
  2. 第三方DedeCMS资源站:如“织梦吧”、“DedeCms模板吧”等网站,搜索“DedeCMS QQ登录插件”,下载并按照说明文档进行安装。

使用插件的通用步骤:

  1. 下载插件包,解压。
  2. 通过FTP将插件文件上传到 /member//include/ 等指定目录。
  3. 登录DedeCMS后台,在“模块管理”或“插件管理”中找到该插件,进行安装。
  4. 安装后,在插件设置页面填入你在QQ互联平台申请到的 AppIDAppKey
  5. 插件通常会自动修改登录模板,或在后台提供“一键生成”按钮,你只需点击即可在登录页面添加QQ登录按钮。
  6. 清理缓存,访问登录页面测试。

方法 优点 缺点 适合人群
手动修改 完全自定义,无插件依赖 步骤繁琐,代码量大,易出错,安全性需自己保障 有PHP开发经验,想深入了解原理的开发者
使用插件 简单、快速、稳定、安全 功能可能受限于插件本身,多一个插件 绝大多数用户,强烈推荐

对于绝大多数站长来说,使用成熟的第三方插件是最佳选择,它能够让你以最小的成本和风险,快速实现QQ登录功能,让你更专注于网站内容的建设。

-- 展开阅读全文 --
头像
dede漏洞修复工具如何有效使用?
« 上一篇 04-05
C语言如何实现PCI设备编程?
下一篇 » 04-05

相关文章

取消
微信二维码
支付宝二维码

目录[+]