0

さて、ここに状況があります。

私は、ColdFusionフォーラム(Galleon)をマーチャントに使用している既存のCRMに統合するという仕事を任されています。

問題は、元のCRM自体がデータベースに独自のログインと「ユーザー」テーブルを持っていることです。Galleonは、独自のログインページと「ユーザー」ファイルを使用します。

私のパートナーと私は、この(確かに単純な)問題を理解しようと頭を悩ませています。セッションのようなグローバル変数を定義する可能性について考えました。CRMのプライマリログインによってトリガーされると、Galleonログインをバイパスします。

しかし、これでは、Galleonにユーザーが誰であるかを伝えて投稿できるようにするという問題は解決されません。

この問題を解決する方法の1つは、元のCRMユーザーファイル全体をGalleonユーザーファイルに挿入することだと思います。そうすれば、同一のユーザー\パスのリストがあります。

アイデアはありますか?

壊す:

ユーザーはCRMスプラッシュページにログインします----->CRMindex.cfm\mainパネルに移動します。その後、ユーザーは「CRMフォーラム」をクリックできます。そして、user \ passのプロンプトが表示される代わりに、Galleonは自分が誰であるかを認識し、スレッドを作成して投稿できるようにします。

4

3 に答える 3

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が期待する名前に変更します。これで、Signature / Avatarなど、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 に答える
0

これを行う最良の方法は、GalleonフォーラムのユーザーテーブルをCRMと同期し、CRMユーザーを追加/削除/更新するときにそれらの同期を維持することです。

これを行うための鍵は、GalleonビジネスレイヤーAPI(Galleon CFCのパブリックメソッド)を利用することです。これにより、Galleonのコードを変更する必要がなくなります。これは、Galleonの更新を簡単にインストールしたい場合に強くお勧めします。(ちなみに、オープンソースプロジェクトはハッカー、特にフォーラムの人気のあるターゲットであるため、サードパーティのコードベースを最新の状態に保つ必要があります。)

既存のユーザーを同期するには、現在のCRMのユーザーを反復処理し、CRMと同じユーザー/パスの組み合わせを使用して(またはハッシュを使用して)、ユーザーごとにGalleonのUser.addUser()メソッドを呼び出すスクリプトを作成する必要があります。そのうちの)。ユーザーを見逃さないように、Galleonのエラー/失敗を必ず確認してください。

GalleonとCRMの同期を維持するには、必要に応じてGalleonのCFCへの呼び出しを追加します。たとえば、CRMからユーザーを削除するときは、User.deleteUser()を呼び出します。

認証には、User.authenticate()を使用して、CRMと同じユーザー/パスの組み合わせを渡します。

サードパーティライブラリのビジネスレイヤーAPIを利用することは、ニーズに合わせてライブラリを変更するよりもはるかに優れた長期的なソリューションです。

于 2012-08-18T06:15:29.623 に答える