我特别 - 我不明白如何将使用oauth进行身份验证的用户链接到我的应用程序中的特定帐户?
所以这是我的应用中的帐户:
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 :(得分:2)
您无法通过OAuth协议本身获取有关用户的信息,但是,通常会有一个端点,您可以向其发出请求,提供用户信息。例如,Google提供了一个:在您收到令牌后,您可以发出请求:
获取https://www.googleapis.com/plus/v1/people/me?access_token= {TOKEN}
这将返回一个JSON对象,其中包含有关用户的信息,包括唯一标识符。
答案 1 :(得分:0)
使用apis获取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;
如果您使用多个oauth,服务可以是google
,twitter
等