2011-09-04 3 views
12

사용자가 Facebook 또는 Twitter 계정을 사용하여 내 웹 사이트에 로그인하도록 허용하고 있지만없는 경우에는 새 계정을 등록하고 내 사이트의 기본 로그인.OAuth (Facebook, Twitter) 및 기본 로그인 - 사용자 테이블

하지만 어떻게해야 내 사용자 테이블과 같이 보인다 :

내 생각 :

  • ID (차, 자동 증가)의 OAuth 로그인의 경우
  • 사용자 이름 (=> ouath_provider + oauth_id , 예 : fb_100001557958700)
  • 비밀번호 (사용자가 선택하거나 oauth의 경우 무작위로 생성되는 비밀번호)
  • 이름 ay)

어떻게 생각하십니까? 아니면 기본 로그인을위한 1 개의 테이블과 oauth 로그인을위한 1 개의 테이블이 있어야합니까? 그렇다면 사용자가 고유 한 ID를 갖는 방식은 무엇입니까?

미리 감사드립니다.

답변

17

제 경험상, 한 테이블에 권한을 저장하고 다른 테이블에 사용자 데이터를 저장하는 것이 가장 좋습니다.

권한 :

network  - Varchar(255) #Twitter/Facebook/Openid/whatever 
network_id - varchar(255) #Users id for that social network. 
user_id  - int 

사용자 :이 구성에

id (primary, auto increment) 
name 
password 
username 

, 동일한 사용자가 미래의 어떤 시점에서 트위터와 페이스 북 모두에 로그인 할 수 있도록하려는 경우, 즉 또한 가능합니다.

+1

OAuth의 경우 사용자의 사용자 이름과 비밀번호는 무엇입니까? null이거나 생성 된 것이거나 사용자가 매번 사용자 이름과 암호를 선택해야합니까? –

+2

이상적으로 사용자가 사용자 이름 (oauth 공급자로부터 자동 완성 될 수 있음)과 암호를 등록하게하십시오. 사용자가 트위터 또는 페이스 북 계정에 액세스 할 수없는 경우이를 대체 할 수 있습니다. – Gazler

+0

실례합니다. @ Gazler,하지만 'user_id'필드는 어떻습니까? 이 문맥에서 그 표현은 무엇입니까? 내 사용자 테이블에 대한 외래 키입니까? – Atieh

2

내 사용자 테이블의 모습입니다.

  • USER_ID (차, 자동 증가) (ENUM (아무도, 트위터, 페이스 북))
  • 가 oauth_uid하지
  • oauth_provider
  • 이름
  • 비밀번호

모든 사용자가 Facebook/Twitter를 통해 등록 할 때 비밀번호 기록과 함께 새 항목이 삽입됩니다. ofcourse로서.

앱/데이터베이스 전체에서 사용할 수있는 고유 한 user_id가 하나 있기 때문에이 방법을 사용하는 것이 좋습니다.

+0

감사합니다. 그리고 Facebook/Twitter 등록의 경우 사용자 이름은 무엇입니까? 그것은 null입니까? –

+0

아니요, 사용자가 facebook/twitter에 등록하면 이미 사용자 이름이있을 수 있습니다. 페이스 북의 경우'username' 필드이고 Twitter의 경우'screen_name' 필드입니다. – dandoen

+0

@ 단원 그러나 여기서 문제는 "네이티브"계정에만 암호가 있다는 것입니다. 트위터 등을 통해 생성 된 accs는 없습니다. 이것은 db의 빈 암호 필드로 이어 지므로 사용자 이름 && password == ""(이것은 매우 강력한 코드 구조가 필요합니다.) – Sliq

관련 문제