Question2Answer 用户整合实现单点登录

发布于 2018-10-07 字数4678 浏览 707 评论 0

Question2Answer 被设计来可以整合一个现有的用户的网站系统,如果你运行的是 WordPress 3.X 以上版本,你可以看看这篇文章中的整合教程,Question2Answer 也可以整合其他的用户系统,实现单点登录,只需要编写少量的 PHP 代码,请看下面的参考教程。

整合教程

1、下载 Question2Answer

你可以在这里:http://www.question2answer.org/question2answer-latest.zip 下载到最先版本的 Question2Answer,也可以在 GitHub 上找到,然后解压到你的网站空间的任意位置。

2、建立 Question2Answer 的数据库

Question2Answer 需要一个数据库储存数据,你可以用过数据库管理工具创建一个名为 Question2Answer 的数据库,以供 Question2Answer 使用。

  • 如果你已经有一个 MySQL 数据库了了,那么 Question2Answer 可以共享这个数据库,只要确保你使用的 MySQL 用户拥有这些权限:CREATE, ALTER, DELETE, INSERT, SELECT, UPDATE, LOCK TABLES。
  • 如果你没有一个 MySQL 数据库,需要创建一个新的数据库和一个 MySQL 用户,这个用户至少需要这些权限:CREATE, ALTER, DELETE, INSERT, SELECT, UPDATE, LOCK TABLES。

3、配置 qa-config.php

在解压出来的文件夹里面找到 qa-config-example.php 文件,重命名文件名字为 qa-config.php

通过文本编辑器打开 qa-config.php,在顶部设置 MySQL 的连接信息,然后将 QA_EXTERNAL_USERS 设置为 true ,保存文件。

4、修改 qa-external

找到 Question2Answer 根目录下面的 qa-external-example 文件夹,重命名为 qa-external。

5、修改 qa-external-users.php

qa-external 文件夹中打开 qa-external-users.php 文件,找到 qa_get_mysql_user_column_type() 方法,这个函数是返回你的用户表中的字段类型,For example, if you use textual identifiers, return VARCHAR(x), where x is the maximum length. If you use numerical identifiers, return the appropriate numeric type, such as INT UNSIGNED or BIGINT

6、添加登录的链接

查找 function qa_get_login_links($relative_url_prefix, $redirect_back_to_url) 在这个函数中添加如下代码:

return array(
  'login' => $relative_url_prefix.'../user?destination=qa',
  'register' =>  $relative_url_prefix.'../user/register',
  'logout' =>  $relative_url_prefix.'../user/logout',
);

7、获取登录用户

查找 function qa_get_logged_in_user()。 在这个函数中添加如何代码:

if ($_COOKIE) {
  // $uid = $GLOBALS['user']->uid;
  foreach ($_COOKIE as $key => $value) {
    if(substr_compare($key, 'SESS', 0)>0){
      $qa_db_connection=qa_db_connection();       
      $result=mysql_fetch_assoc(
        mysql_query(
          "SELECT uid, name, mail FROM users WHERE uid=".   //, admin_flag
          "(SELECT uid FROM sessions WHERE sid='".mysql_real_escape_string($_COOKIE[$key], $qa_db_connection)."')",
          $qa_db_connection
        )
      );
    if (is_array($result))
      return array(
        'userid' => $result['uid'],
        'publicusername' => $result['name'],
        'email' => $result['mail'],
        'level' => $result['uid']==1 ? QA_USER_LEVEL_ADMIN : QA_USER_LEVEL_BASIC
      );
    }
  }
}

return null;

8、获取用户的Email地址

查找 function qa_get_user_email($userid)。 在这个函数中添加如何代码:

$qa_db_connection=qa_db_connection();
$result=mysql_fetch_assoc(
  mysql_query(
    "SELECT mail FROM users WHERE uid='".mysql_real_escape_string($userid, $qa_db_connection)."'",
    $qa_db_connection
  )
);
 
if (is_array($result))
  return $result['mail'];
return null;

大家可以根据自己的网站系统的需求,然后添加想对应的代码。

相关阅读

如果你对这篇文章有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助。

扫码二维码加入Web技术交流群

您暂时不能评论!

管理员开启了需要登录才能够评论,你可以免费注册一个本站的账号。

还没有评论!

目前还没有任何评论,快来抢沙发吧!