사용자 모델에 열린 인증 인증을 추가 할 때 테이블 구조는 어떻게 생겼습니까?

StackOverflow https://stackoverflow.com/questions/1809595

문제

사용자 모델이있는 Rails 앱이 있습니다. 사용자가 소수의 서비스로 로그인 할 수 있도록하고 싶습니다. 데이터베이스에 이것을 저장할 수있는 두 가지 방법이 있지만 어느 것이 가장 좋은지 잘 모르겠습니다. 사용자가 하나 이상의 서비스에 연결하고 계정을 연결할 수 있기를 원합니다.

방법 1 :각 서비스마다 사용자 테이블에 토큰/비밀 필드를 추가하십시오. 예를 들어 Twitter Token, Twitter Secret, Twitter Screename 및 Twitter 프로필 IMG를 저장하려면 조금 문제가있는 것 같습니다. 사용하지 않은 열이 많은 사용자 테이블을 볼 수있었습니다. 각 서비스마다 저장하려는 추가 정보가있을 수 있습니다. 다음과 같이 보일 것입니다.

id
twitter_token
twitter_screenname
twitter_secret
twitter_pic
facebook_token
facebook_secret
facebook_pic
facebook_name
google_token
google_secret
google_name
etc.

방법 2 :
또는 각 사용자가 많은 소셜 로그인을 가질 수 있으며 각 소셜 로그인은 한 명의 사용자에게 속합니다. 그런 다음 나는

user_id
token
secret
social_type  # foreign key to a social_site look up table
social_pic

그리고 소셜 유형 테이블은 다음과 같은 것처럼 보일 것입니다.

id
social_site_name
oauth_url

이 접근법의 유일한 부정적인 것은 모든 서비스에 대해 저장할 내용을 일반화해야한다는 것입니다. 너희들은 어떻게합니까? 아마도 STI는 여기에 순서대로있을 수 있습니다 ... 기본 로그인 클래스에서 상속되는 각 유형의 로그인에 대한 클래스가있을 수 있습니다.

감사!

도움이 되었습니까?

해결책

나는 다음과 같은 것을 제안 할 것이다 :

  • 사용자 많은 것을 가질 수 있습니다 로그인, 각 로그인 하나에 속합니다 사용자 뿐.
  • 로그인 구체적입니다 유형, 하나 로그인 하나입니다 유형 뿐.
  • SocialLogin 테이블에는 모두에게 공통된 필드가 있습니다 로그인 유형, Google, FaceBook 그리고 Twitter 테이블에는 각각의 필드가 있습니다.

login_model_01

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top