2015-09-24 2 views
7

統合の設計にどのようにアプローチするかについての質問があります。私はCompanyUserの2つのモデルを持っています。私の場合、ユーザーは自分のアプリに登録し、Twitter/Facebook/LinkedInの各アカウントにアプリを接続して投稿/ツイート/その他の表示/作成ができるようにするオプションが表示されます。 Companyhas_manyUsersとソーシャルメディアアカウントが会社に属しているため、Providerという別のモデルを使用して資格情報をCompanyモデルに結び付け、資格情報を保存して、企業のソーシャルメディアアカウントにアクセスする権限を持つユーザーを許可します。Rails 4ユーザーと関連付けられたモデルに結び付けられた複数のプロバイダを持つDevise Omniauth

複数のオムニバスプロバイダを設定する方法に関するさまざまなチュートリアルに従ってきましたが、それらはすべてユーザーモデルに結び付けて、ユーザーモデルにdevise :omniauthableを追加するように指示しています。

ユーザーの代わりにCompanyをomniauthableにするにはどうすればよいですか?ユーザー認証/登録ビューomniauthを許可しない場合は、私のモデルを全面的にする必要がありますか?

ソーシャルメディアの統合を初めて構築したので、私の質問が意味をなさないことを願っています。ありがとう!

答えて

0

多くの考えの後、私はかなりうまく動作し、元々試みていたよりもはるかに単純なアプローチを考え出しました。ハックのように思えるので、誰かがよりクリーンなアプローチをしているかどうかは確かに分かります。

私が最初にしたことは、ユーザーが会社としてログインするのではなく、会社のユーザーとしてログインさせたくないため、会社のモデルを全面的にすることをあきらめることでした。代わりに、私はユーザモデルを全身にして、Identityモデルを作成しました。このモデルはユーザと会社belongs_toです。 UserおよびCompany両方ともhas_oneIdentityである。ユーザーがプロバイダーを承認すると、新しいIDが作成されます。

ユーザーと会社の両方がIDを所有しているため、belong_to会社はその会社を通じてそのIDにアクセスできます。同様に、ユーザがログインしてアイデンティティを持たない場合、システムはアイデンティティを持っているかどうかをチェックしてアイデンティティを追加できるようにします。この方法では、会社ごとにプロバイダーごとにIDが1つしかなく、どのユーザーがそれを作成するかは関係ありません。

2

私はこのような働きをしています。私たちは、omniauthを使用して、FB、LI、およびTwitterからのoauthの識別を可能にするアプリを持っています。私はDeviseとOmniauthをUserモデルに束縛しておき、Providerフィールド、uuidとuser_idの関係を持つIdentityモデルを持っています。この方法で、プロバイダまたはアクティブセッションから返された電子メールを使用して、ユーザがシステムにすでに存在するかどうかを判断し、それに応じてIDをリンクすることができます。 Twitterではメールが返ってこないので、ユーザーが確認済みのメールを持っているかどうかを判断するために追加する必要があります。会社のモデルをomniauthableかつdevise_authentcatableにすることで、同じことを間違いなく行うことができますが、直感的ではありません。私は標準的なユーザーのアプローチを使用し、ユーザーに1つ以上の企業を所有させます。お役に立てれば。

関連する問題