0

好吧,情况就是这样。

我的工作任务是将冷融合论坛 (Galleon) 集成到商家使用的现有 CRM 中。

问题是,原始 CRM 本身在数据库中有自己的登录名和“用户”表。Galleon 使用自己的登录页面和“用户”文件。

我和我的搭档正在绞尽脑汁试图找出这个(诚然简单的)问题。我们考虑过定义一个全局变量(如会话)的可能性,一旦被 CRM 的主登录触发,它将绕过 Galleon 登录。

但这并不能解决告诉 Galleon 用户是谁以便他可以发帖的问题。

我在想解决这个问题的方法之一是将整个原始 CRM 用户文件插入到 Galleon 用户文件中。这样它就有一个相同的用户\通行证列表。

有什么想法吗?

分解:

用户在 CRM 初始页面登录-----> 带到 CRM index.cfm\main 面板。然后用户可以点击“CRM FORUM!” 而不是被重新提示输入用户\通行证,Galleon 知道他是谁,并允许他创建线程和发布。

4

3 回答 3

0

最好的方法是将您的 Galleon 论坛用户表与您的 CRM 同步,然后在您添加/删除/更新 CRM 用户时使它们保持同步。

做到这一点的关键是利用 Galleon 业务层 API——也就是 Galleon CFC 中的公共方法。这将使您不必修改 Galleon 的任何代码,如果您想轻松安装 Galleon 更新,我强烈建议您这样做。(顺便说一句,你应该保持你的第 3 方代码库是最新的,因为开源项目是黑客的热门目标——尤其是论坛。)

要同步现有用户,您需要编写一个脚本,迭代当前 CRM 的用户并为每个用户调用 Galleon 的 User.addUser() 方法,使用与 CRM 相同的用户/通行证组合(或者可能使用哈希其中)。请务必中断任何 Galleon 错误/故障,以免错过任何用户。

要使 Galleon 与您的 CRM 保持同步,请根据需要添加对 Galleon 的 CFC 的调用。例如,当您从 CRM 中删除用户时,调用 User.deleteUser()。

对于身份验证,您将使用 User.authenticate(),传递与您的 CRM 相同的用户/密码组合。

利用 3rd 方库的业务层 API 是一个比尝试修改它们以满足您的需求更好的长期解决方案。

于 2012-08-18T06:15:29.623 回答
0

您所描述的正是有多少网站在工作,无论您使用何种机制进行身份验证(即 OAuth、Twitter 等)。您使用外部服务进行身份验证,并从该外部服务中获取某种类型的令牌说“这个人真的是经过身份验证的。” 由您的代码(在本例中为 Galleon)决定“此人已通过身份验证,但他们在我们的系统中没有帐户。让我们创建一个。” 这通常需要您返回外部服务以获取姓名、电子邮件地址等。

您很可能需要在您的外部服务中做一些额外的工作,以便更新 Galleon 中的客户信息。例如,如果有人更改了他们的电子邮件地址,那么 Galleon 中的电子邮件地址很可能也应该更新。这可能会变得复杂,但从客户的角度来看是必要的。

于 2012-08-17T17:14:44.230 回答
0

肯定有很多方法可以让猫在这上面剥皮。我下载了 Galleon 2 论坛代码以查看 user.cfc

您可以修改此函数中的查询以从 CMS 中提取所需的字段:

<cffunction name="getUser" access="public" returnType="struct" output="false" hint="Returns a user.">

<cfquery name="qGetUser" datasource="#variables.dsn#">      
SELECT
    [cmsusertable].cmsid as ID,
    [cmsusertable].cmsuser as username, 
    [cmsusertable].cmspassword as password,
    [cmsusertable].cmsemail as emailaddress,
    [cmsusertable].createDate as datecreated,
    [cmsusertable].cmsactive as confirmed, 
    [cmsusertable].cmssignature as signature,
    [cmsusertable].cmsavatar as avatar
FROM
    [cmsusertable]users
WHERE 
    [cmsusertable].username = <cfqueryparam value="#arguments.username#" cfsqltype="CF_SQL_VARCHAR" maxlength="50">
</cfquery>

请记住,您必须按照 Galleon 的期望从查询中返回字段,因此使用“as”语句将 CMS 数据库字段重命名为 Galleon 期望的字段。现在,您的 CMS 表中可能没有其中一些无关字段,例如签名/头像。如果您可以扩展您的 CMS 表和用户例程以适应这些字段,那可能会很好。或者您可以修改 Galleon 中的配置文件例程以仅更新签名/头像而不是整个配置文件。如果您确实使用 Galleon 表来存储此信息,请记住添加一个连接以包含这些请求重新统一用户数据的字段。

您还必须修改项目中大约 4 个文件(user.cfc、conference.cfc、message.cfc、thread.cfc)中的联接,以改为与您的 CMS 用户表联接。

最后,您必须修改 login.cfm 以简单地尝试使用 CMS 用户会话中的信息设置 session.user 结构,如果失败,则将用户重定向回 CMS 登录页面。

总的来说,我认为这不会太难。我确定我错过了一些东西,但也许那会让你继续前进。

于 2012-08-17T20:46:27.760 回答