2014-01-15 78 views
5

我特別 - 我不明白如何將使用oauth進行身份驗證的用戶鏈接到我的應用程序中的特定帳戶?如何唯一標識用戶通過oauth登錄?

因此,這裏是我的applciation帳戶:

CREATE TABLE accounts (
    id BIGINT NOT NULL AUTO_INCREMENT, 
    username VARCHAR(40), 
    email VARCHAR(256), 
    created DATETIME, 
    updated DATETIME, 
    PRIMARY KEY (id), 
    UNIQUE KEY (email), 
    UNIQUE KEY (username) 
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci; 

使用OpenID例如有一個獨特的用戶ID(URI,XRI)唯一標識該用戶。這樣我就可以鏈接到我的帳戶這樣的:

CREATE TABLE openid_logins (
    id BIGINT NOT NULL auto_increment, 
    fk_accounts_id BIGINT NOT NULL, 
    openid_identity TEXT NOT NULL, /*that's unique user id*/ 
    openid_provider_url VARCHAR(255) NOT NULL, /*flickr, yahoo, live_journal*/ 
    PRIMARY KEY (id), 
    INDEX (openid_identity), 
    FOREIGN KEY (fk_accounts_id) REFERENCES accounts(id) ON UPDATE CASCADE ON DELETE CASCADE 
); 

所以每當用戶通過OpenID登錄 - >我可以得到他經常帳戶引用fk_accounts_id。

但是,當涉及到oauth - AFAIK沒有這樣的事情oauth_identity_string ...因爲oauth標記可能會改變自己的標記不能用作一個獨特的鏈接到我的應用程序中的配置文件.....那麼是什麼我應該怎麼做?如何唯一標識通過oauth登錄的用戶?

+0

並非所有供應商共享相同的想法什麼是用戶標識符,因爲這個標識符概念不是由OAuthxx定義的。例如,對於Twitter,這是一個數字(沒有電子郵件)。對於大多數人來說,電子郵件是標識符,但沒有明確的規定。 –

+0

@SimonMourier你能提供一個提供者和標識符的具體列表嗎? – mareoraft

+0

不,我不能。你必須瀏覽你感興趣的每個提供者的開發者文檔(甚至沒有這樣一個「最廣泛使用的」提供者列表),並通過閱讀和理解他們文檔。 –

回答

2

您無法通過OAuth協議本身獲取有關該用戶的信息,但是,通常有一個端點可供您提出用戶信息請求。例如谷歌提供了一個:在您收到令牌之後,你可以做一個請求:

GET https://www.googleapis.com/plus/v1/people/me?access_token= {TOKEN}

這將返回有關用戶的含JSON對象信息,包括唯一標識符。

0

使用API​​獲取account_id並將其存儲在以下格式:

-- -------------------------------------------------------- 

-- 
-- Table structure for table oauth -- its like a username passwd thingy 
-- 

CREATE TABLE IF NOT EXISTS oauth (
    oauth_id    bigint unsigned  NOT NULL AUTO_INCREMENT UNIQUE, 
    service     varchar(16)   NOT NULL, 
    account_id    varchar(256)  NOT NULL, 
    token     text    NOT NULL, 
    token_secret   text    NOT NULL, 
    PRIMARY KEY (service, account_id) 
) ENGINE=InnoDB DEFAULT CHARSET=ascii COLLATE=ascii_bin; 

服務可以是googletwitter,等等,如果你正在使用多個OAuth的

相關問題