2014-01-15 3 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; 

с использованием Вконтакте, например, есть уникальный идентификатор пользователя (Ури 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

Нет, я не могу. Вам нужно будет просмотреть документацию разработчика для каждого интересующего вас провайдера (нет даже такого списка «наиболее широко используемых» поставщиков), и узнайте, прочитав и понимая их Docs. –

ответ

2

Вы не можете получить информацию о пользователе самим протоколом OAuth, однако обычно есть конечная точка, к которой вы можете сделать запрос, который предоставляет информацию о пользователе. Например Google предоставляет один: после того, как вы получите ваш маркер, вы можете сделать запрос:

ПОЛУЧИТЬ https://www.googleapis.com/plus/v1/people/me?access_token= {ЗНАК}

Это возвращает объект JSON, содержащий информацию о пользователе, в том числе уникальный идентификатор.

0

Получить account_id с помощью APIs и хранить его в следующем формате:

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

-- 
-- 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; 

услуга может стать google, twitter, и т.д., если вы используете несколько OAuth

Смежные вопросы