在wordpress中接入qq登录

接入的理由:创建新的帐号是困难的,而且记住这么多帐号也是困难的。如果有既有的帐号能用最好了。而且用这些熟悉的帐号,会让大家感觉比较亲切。

步骤:

申请帐号

申请帐号的地址是qq互联。用你的qq号登录就可以了。在管理中心创建一个新的网站应用。创建完成就可以得到一个APP ID 和APP KEY。

当然,作为网站接入,需要有网站所有权的验证。在你的网站主页上添加一个meta,让qq确认你是这个网站的主人。

登录的基本流程

  1. 获得用户的授权码
  2. 通过授权码获得访问钥匙(Access Token)
  3. 通过访问钥匙来获得用户的OpenID。 这个OpenID是唯一的

有了访问钥匙和用户ID就可以访问用户的信息了。 这个登录流程在这个代码中比较清楚。

<?php 
  //应用的APPID
  $app_id = "YOUR_APP_ID";
  //应用的APPKEY
  $app_secret = "YOUR_APP_KEY";
  //成功授权后的回调地址
  $my_url = "YOUR_REDIRECT_URL";
 
  //Step1:获取Authorization Code
  session_start();
  $code = $_REQUEST["code"];
  if(empty($code)) 
  {
     //state参数用于防止CSRF攻击,成功授权后回调时会原样带回
     $_SESSION['state'] = md5(uniqid(rand(), TRUE)); 
     //拼接URL     
     $dialog_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=" 
        . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
        . $_SESSION['state'];
     echo("<script> top.location.href='" . $dialog_url . "'</script>");
  }
 
  //Step2:通过Authorization Code获取Access Token
  if($_REQUEST['state'] == $_SESSION['state']) 
  {
     //拼接URL   
     $token_url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&"
     . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
     . "&client_secret=" . $app_secret . "&code=" . $code;
     $response = file_get_contents($token_url);
     if (strpos($response, "callback") !== false)
     {
        $lpos = strpos($response, "(");
        $rpos = strrpos($response, ")");
        $response  = substr($response, $lpos + 1, $rpos - $lpos -1);
        $msg = json_decode($response);
        if (isset($msg->error))
        {
           echo "<h3>error:</h3>" . $msg->error;
           echo "<h3>msg  :</h3>" . $msg->error_description;
           exit;
        }
     }
 
     //Step3:使用Access Token来获取用户的OpenID
     $params = array();
     parse_str($response, $params);
     $graph_url = "https://graph.qq.com/oauth2.0/me?access_token=" 
     $params['access_token'];
     $str  = file_get_contents($graph_url);
     if (strpos($str, "callback") !== false)
     {
        $lpos = strpos($str, "(");
        $rpos = strrpos($str, ")");
        $str  = substr($str, $lpos + 1, $rpos - $lpos -1);
     }
     $user = json_decode($str);
     if (isset($user->error))
     {
        echo "<h3>error:</h3>" . $user->error;
        echo "<h3>msg  :</h3>" . $user->error_description;
        exit;
     }
     echo("Hello " . $user->openid);
  }
  else 
  {
     echo("The state does not match. You may be a victim of CSRF.");
  }
?>

另外有qq的SDK下载地址是这里

sdk的作用就是封装了上面的这些代码。(针对登录的过程)

除了登录过程,sdk还封装了一些其他的api,使用起来比较方便,而且每个api的调用,有实例可以参考,故而比较推荐这个。下面是使用API的实例,相对于上面的代码,这个要简单的多。这里的qq_callback函数中,会做state的检查。

<?php
require_once("./Connect2.1/API/qqConnectAPI.php");
$code = $_REQUEST["code"];
$qc = new QC();

if(empty($code))
{
  $qc->qq_login();
}else{
  $token= $qc->qq_callback();
  $openid=$qc->get_openid();

  $qc1 = new QC($token,$openid) ;
  $qqinfo = $qc1->get_user_info();
  print_r($qqinfo) ;
}
?>

wordpress中加入qq登录支持

登录

需要添加一个新的页面,名为qq-login.php, 在这里处理获取授权码,获取access token和openID这三个东西。然后以openID为userid自动在站内注册一个 用户,并获取用户的名字和头像等基本信息。把这些信息存储在本地数据库中。

此后,用当前新注册的用户登录,然后跳转到主页面。在主页上显示用户名和用户的头像。

评论

新用户登录以后,可以直接用原来的代码进行评论,只是在需要修改用户的头像。这个可以添加一个filter get_avata来修改头像。头像为前面存下来的qq头像。 这个数据应该存放在wp_usermeta表中。

注册

禁止新用户注册。修改登录页面,不要出现register这个按钮。(注:不能把注册这个功能disable,否则自动注册也不能成功)

管理功能

禁止qq登录用户的其他管理功能,需要修改wp-admin/index.php , 判断如果不是admin,就跳回主页。

修要同样修改的是user-edit.php

具体实现

新的代码添加在插件qq-login中。

其他的改动在

  1. wp-login.php。 添加登录按钮,删除注册按钮
  2. comments.php (主题中) ,修改登录发表评论的文字,添加登录链接
  3. 添加qq-login.php文件,处理qq登录


Wordpress一览无余,源码面前没有秘密,wordpress的函数调用库,展示wordpress页面打开过程中十几万个函数调用,学习WP开发的绝佳资源。点击这里进入

本文地址: http://www.bagualu.net/wordpress/archives/6133 转载请注明




“在wordpress中接入qq登录”的2个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注