2015-09-24 18 views
7

Mam pytanie, jak podejść do projektu integracji. Mam dwa modele Company i User. W moim przypadku użytkownicy zarejestrują się w mojej aplikacji, a następnie otrzymają możliwość podłączenia aplikacji do ich różnych kont (Twitter, Facebook i LinkedIn), aby mogli przeglądać/tworzyć posty/tweety/etc. Ponieważ Companyhas_many i konta w mediach społecznościowych należą do firmy, chcę powiązać poświadczenia z modelem Company przy użyciu innego modelu o nazwie Provider w celu przechowywania poświadczeń, umożliwiając w ten sposób każdemu użytkownikowi, który ma pozwolenie na dostęp do konta społecznościowego firmy.Szyny 4 Wymyśl Omniauth z wieloma dostawcami związanymi z modelem związanym z użytkownikiem

Przeglądam różne samouczki dotyczące konfigurowania wielu dostawców omniauth, ale wszystkie koncentrują się na powiązaniu ich z modelem użytkownika i dodaniu do mojego modelu użytkownika devise :omniauthable.

Jak zrobićomniautowalne zamiast użytkownika? Czy muszę nawet nadać mojemu modelowi funkcję omniautowalną, jeśli nie mam zamiaru zezwalać na omniauth uwierzytelniania/rejestracji użytkownika?

Po raz pierwszy buduję integrację z mediami społecznościowymi, więc mam nadzieję, że moje pytanie ma sens. Dzięki!

Odpowiedz

0

Po wielu przemyśleniach opracowałem podejście, które działa całkiem dobrze i jest znacznie prostsze niż to, co początkowo próbowałem. Wygląda to jak włamanie, więc z pewnością jestem otwarty na to, czy ktoś ma czystsze podejście.

Pierwszą rzeczą, którą zrobiłem, było zrezygnowanie z modelowania firmy w sposób omnialny, ponieważ nie chciałem, aby użytkownicy logowali się jako firma, ale raczej jako użytkownik firmy. Zamiast tego zrobiłem model użytkownika omniautowalnym, a następnie utworzyłem model Identity, który jest używany przez użytkownika i firmę. User i Company zarówno has_one. Gdy użytkownik autoryzuje dostawcę, tworzona jest nowa tożsamość.

Ponieważ zarówno użytkownik, jak i firma są właścicielami tożsamości, inni użytkownicy, którzy mają belong_to, firma może uzyskać dostęp do tej tożsamości za pośrednictwem firmy. Podobnie, jeśli użytkownik się zaloguje i nie ma żadnych tożsamości, system sprawdzi, czy jego firma ma jakiekolwiek tożsamości, zanim zezwoli na ich dodanie. W ten sposób jest tylko jedna tożsamość na jednego dostawcę na firmę i nie ma znaczenia, który użytkownik go utworzy.

2

Mam coś podobnego do tego działa. Mamy aplikację, która pozwala używać omniauth i opracowywać identyfikację oauth z FB, LI i Twittera. Zachowuję Devise i Omniauth powiązane z modelem User i mam model Identity, który ma pole providera, relację uuid i user_id. W ten sposób za pomocą wiadomości e-mail zwróconej od dostawcy lub aktywnej sesji mogę określić, czy użytkownik już istnieje w systemie i odpowiednio powiązać tożsamość. W przypadku Twittera jest to trochę skomplikowane, ponieważ nie zwracają wiadomości e-mail, więc musisz dodać, aby określić, czy użytkownik ma zweryfikowaną wiadomość e-mail, a jeśli nie, to poproś o nią. Z pewnością możesz zrobić to samo, sprawiając, że model firmy jest omniautowalny i devise_authentCable, ale wydaje się to trochę sprzeczne z intuicją. Używam standardowego podejścia użytkownika i mam użytkownika, który jest właścicielem jednej lub więcej firm. Mam nadzieję że to pomoże.