因为有一个 Struts2 网站发布,需要整合一个论坛来使用,公司的一个项目过去曾经整合过一个英文论坛,但似乎不能满足我们的需求,需要找一个成熟稳定的中文论坛,与我们的系统结合。
最终选择了 Discuz 作为我们的论坛系统,主要是因为它提供了一套可用的 Passport API,来直接与我们现有系统进行整合。
下面摘录 Discuz 文档中的内容来说明整合原理,随后的几篇中,将详细描述具体的整合过程。
假设已设置如下变量或参数
- 挂接 Discuz! Passport 的应用程序假设为一套 PHP 语言编写的 CMS 系统
- Discuz! 的 URL 为 http://www.myforums.com
- 应用程序的 URL 为 http://www.mywebsite.com
- 应用程序的注册页面为 http://www.mywebsite.com/register.php
- 应用程序的登录页面为 http://www.mywebsite.com/login.php?action=login
- 应用程序的退出页面为 http://www.mywebsite.com/login.php?action=logout
开启通行证后的用户登录流程
- 如果用户在论坛点击“登录”,则转向到事先设置好的应用程序登录页面(http://www.mywebsite.com/login.php?action=login),并在登录页面的 URL 中加入参数 forward(加入 forward 后的链接例如 http://www.mywebsite.com/login.php?action=login&forward=http://www.myforums.com/index.php),用于在登录后将用户导向到指定的 URL。
- 应用程序收到此请求后,按照惯例生成表单,并增加一个表单变量,将 GET 方式传递过来的 forward 参数通过表单进行传递。
- 用户在应用程序的表单中填写登录信息,并提交到应用程序的登录验证程序。应用程序验证用户提交的用户名和密码的合法性:
- 如果不通过:提示用户名密码错误,要求其返回上一页重新填写。
- 如果通过,需要进行如下操作:
- 设置自身 Cookie 或 Session,使得应用程序自身处于登录状态。
- 检查表单中是否提交了 forward 变量,如有,则意味着登录请求可能是由论坛而来,将此变量传递到后面的请求中。如没有,自行生成 forward 变量,使得论坛登录后能够跳转回到应用程序中。
- 通过 header('Location: http://www.myforums.com/api/passport.php?action=login&auth=xxx&forward=http://yyy&verify=zzz') 的方式,将登录请求传递到论坛进行处理。其中 auth 用来将用户信息与资料以特定的格式,加密传递给论坛,forward 用于告知论坛 Passport API 完成自身操作后转向到的 URL 地址,verify 用于验证前面两个变量的有效性。auth、forward、verify 格式与结构将在后面进行说明。
- Discuz! Passport API 在接收到由应用程序通过 header() 提交过来的请求后,进行如下操作:
- 根据 verify 判断 auth 和 forward 变量是否合法,如合法则继续,否则终止。
- 将 auth 根据既定算法解密,并还原成数组,数组的内容与格式将在后面进行说明。根据数组中的内容,检查此用户是否存在。如存在,则根据上述数组中的内容 UPDATE 论坛中相应的用户资料。如不存在,则使用数组中的信息 INSERT 到论坛用户资料表中。
- 论坛设置 Cookie 或 Session,使得论坛自身处于登录状态。
- 根据应用程序反馈的 forward 值,通过 header('Location: http://xxx') 的形式将页面跳转到 forward 变量指定的 URL。
- 至此,登录流程结束
开启通行证后的用户退出流程
- 如果用户在论坛点击“退出”,则转向到事先设置好的应用程序退出页面(http://www.mywebsite.com/login.php?action=logout),并在登录页面的 URL 中加入参数 forward(例如 http://www.mywebsite.com/login.php?action=login&forward=http://www.myforums.com/index.php),用于在退出后将用户导向到指定的 URL。
- 应用程序收到此请求后,清除自身 Cookie 或 Session,使得应用程序自身处于非登录状态。
- 检查是否提交了 forward 变量,如有,则意味着登录请求可能是由论坛而来,将此变量传递到后面的请求中。如没有,自行生成 forward 变量,使得论坛登录后能够跳转回到应用程序中。
- 通过 header('Location: http://www.myforums.com/api/passport.php?action=logout&forward=http://yyy&verify=zzz') 的方式,将退出请求传递到论坛进行处理。其中 forward 用于告知论坛 Passport API 完成自身操作后转向到的 URL 地址,verify 用于验证 forward 变量的有效性。forward、verify 格式与结构将在后面进行说明。
- Discuz! Passport API 在接收到由应用程序通过 header() 提交过来的请求后,进行如下操作:
- 根据 verify 判断 forward 变量是否合法,如合法则继续,否则终止。
- 清楚论坛的 Cookie 或 Session,使得论坛自身处于非登录状态。
- 根据应用程序反馈的 forward 值,通过 header('Location: http://xxx') 的形式将页面跳转到 forward 变量指定的 URL。
- 至此,退出流程结束。
开启通行证后的用户注册流程
posted on 2007-08-11 17:30
steady 阅读(3278)
评论(3) 编辑 收藏 所属分类:
Java