Нужно войти в систему с помощью Твиттера и найти друзей.. думаю, я все испортил.Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Нужно войти в систему с помощью Твиттера и найти друзей.. думаю, я все испортил.

Сообщение Anonymous »

Я интегрирую в свое приложение знак использования Facebook и Twitter. Позже я намерен включить в список других поставщиков. На самом деле я собрал его на основе открытого исходного кода, который нашел в Интернете, но мне кажется, что я здесь что-то напутал.
Структура моей базы данных следующая:

Код: Выделить всё

Users
ID|NAME|....|EMAIL|PASSWORD

USER SIGNONS
USER_ID | SIGNIN_TYPE| SIGNIN_ID
Когда кто-либо создает учетную запись, используя вход в систему с использованием учетной записи Facebook или Twitter, в таблице входов пользователей делается запись, указывающая, что у пользователя есть тип входа «facebook» или «twitter». .
Для аутентификации я использовал следующий код:

Код: Выделить всё

public function loginAction() {

$this->ajaxInit();

// get an instace of Zend_Auth
$auth = Zend_Auth::getInstance();

$p = $this->_getAllParams();

if(isset($p['redirectto'])){
$this->setRedirect($p['redirectto']);
}else{
$redirect = explode('?', $_SERVER['HTTP_REFERER']);
$this->setRedirect($redirect[0]);
}

// check if a user is already logged
// this checks if he is logged into an open id providor
/*if ($auth->hasIdentity()) {
return $this->_redirect('/index/index');
}*/

// if the user is not logged, the do the logging
// $openid_identifier will be set when users 'clicks' on the account provider
$openid_identifier = $this->getRequest()->getParam('openid_identifier', null);

if($this->getRequest()->getParam('rememberme', null)>0){
//Zend_Session::rememberMe(60 * 60 * 24 * 30);
}

// $openid_mode will be set after first query to the openid provider
$openid_mode = $this->getRequest()->getParam('openid_mode', null);

// this one will be set by facebook connect
$code = $this->getRequest()->getParam('code', null);

// while this one will be set by twitter
$oauth_token = $this->getRequest()->getParam('oauth_token', null);

// do the first query to an authentication provider
if ($openid_identifier) {

if ('https://www.twitter.com' == $openid_identifier) {
$adapter = $this->_getTwitterAdapter($redirect);
_log('inside here');
} else if ('https://www.facebook.com' == $openid_identifier) {
$adapter = $this->_getFacebookAdapter($redirect);
} else {
// for openid
$adapter = $this->_getOpenIdAdapter($openid_identifier);

// specify what to grab from the provider and what extension to use
// for this purpose
$toFetch = _config('openid', 'tofetch');
// for google and yahoo use AtributeExchange Extension
if ('https://www.google.com/accounts/o8/id' == $openid_identifier || 'http://me.yahoo.com/' == $openid_identifier) {
$ext = $this->_getOpenIdExt('ax', $toFetch);
} else {
$ext = $this->_getOpenIdExt('sreg', $toFetch);
}

$adapter->setExtensions($ext);
}

// here a user is redirect to the provider for loging

$result = $auth->authenticate($adapter);

// the following two lines should never be executed unless the redirection faild.
//$this->_helper->FlashMessenger('Redirection faild');

if(strstr($redirect, 'import')){
return $this->_redirect($redirect.'?cmsg=redirection-failure');
}

return $this->_redirect('/accounts/sign-in?error=redirection-failure');

}else if ($openid_mode || $code || $oauth_token) {
// this will be exectued after provider redirected the user back to us
if ($code) {
// for facebook
$adapter = $this->_getFacebookAdapter();
} else if ($oauth_token) {
// for twitter
$adapter = $this->_getTwitterAdapter()->setQueryData($_GET);
} else {
// for openid
$adapter = $this->_getOpenIdAdapter(null);

// specify what to grab from the provider and what extension to use
// for this purpose
$ext = null;

$toFetch = _config('openid');

// for google and yahoo use AtributeExchange Extension
if (isset($_GET['openid_ns_ext1']) || isset($_GET['openid_ns_ax'])) {
$ext = $this->_getOpenIdExt('ax', $toFetch);
} else if (isset($_GET['openid_ns_sreg'])) {
$ext = $this->_getOpenIdExt('sreg', $toFetch);
}

if ($ext) {
$ext->parseResponse($_GET);
$adapter->setExtensions($ext);
}
}

$result = $auth->authenticate($adapter);

if ($result->isValid()) {
$toStore = array('identity' =>  $auth->getIdentity());

$options = array();

if ($ext) {
// for openId
$toStore['properties'] = $ext->getProperties();
$options['signin_type'] = 'open_id';
$toStore['signin_type'] = 'open_id';
$options['signin_id'] = $auth->getIdentity();
} else if ($code) {
// for facebook
$msgs = $result->getMessages();
$toStore['properties'] = (array) $msgs['user'];
$options['signin_type'] = 'facebook';
$toStore['signin_type'] = 'facebook';
$options['signin_id'] = $auth->getIdentity();
} else if ($oauth_token) {
$identity = $result->getIdentity();
$twitterUserData = (array) $adapter->verifyCredentials();
$toStore = array('identity' => $identity['user_id']);
if (isset($twitterUserData['status'])) {
$twitterUserData['status'] = (array) $twitterUserData['status'];
}
_log($twitterUserData);
$toStore['properties'] = $twitterUserData;
$options['signin_type'] = 'twitter';
$toStore['signin_type'] = 'twitter';
$options['signin_id'] = $identity['user_id'];
}

$user = _factory('people')->get(false, $options);

if(count($user)>0){
$user = array_pop($user);
$auth->getStorage()->write($user['account_email']);

return $this->_redirect($this->setRedirect);
//return $this->_redirect('/accounts/index');
}else{
$auth->getStorage()->write($toStore);
return $this->_redirect('/accounts/welcome');
}

} else {
return $this->_redirect('/index/index');
}
}
Проблема, с которой я столкнулся, заключается в том, что я создаю функцию поиска для ваших друзей. Я научился работать с Facebook, это было легко. Однако для Twitter я хотел использовать код Zend_Service_Twitter фреймворка Zend. Однако я обнаружил, что мне нужно имя пользователя для входа в систему и использования токена доступа - я обнаружил, что на данный момент я не храню имя пользователя.
В настоящее время есть только одно место. во всей моей программе, которая выполняет аутентификацию, и ее код, опубликованный выше, доступен через www.mysite.com/accounts/login
Что-то не так с моим дизайном, но я могу' не могу сказать что. Дело в том, что теперь я не могу войти в учетную запись Twitter, чтобы получить какие-либо данные о пользователе. Однако я могу войти в систему через Twitter, поскольку я сохраняю ровно столько, чтобы подтвердить, что пользователь вошел в систему, используя учетную запись Twitter, и что соответствующий пользователь существует с аутентифицированной учетной записью. Кроме того, как только пользователь вошел в систему, я не могу получить доступ к информации пользователя в Твиттере.
Я думаю, Facebook упрощает эту задачу, потому что у них есть специальный API для решения этой проблемы. Эта проблема определенно вызовет у меня проблемы в дальнейшем, если я решу добавить больше учетных записей.
Любая помощь будет очень признательна здесь. В приведенном выше коде, конечно, нет возможности связывать учетные записи с уже вошедшими в систему пользователями.
Как мне структурировать свой код входа и таблицы.
Здесь я использую Zend Framework.


Подробнее здесь: https://stackoverflow.com/questions/656 ... d-it-all-u
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как завести друзей друзей (общие друзья) - django
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Как завести друзей друзей (общие друзья) - django
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как завести друзей друзей - Джанго
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Можно ли войти в систему с использованием пользователя и учетных данных (JWT) и войти в систему Oauth2 с помощью Google?
    Anonymous » » в форуме JAVA
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous
  • Как я могу войти в систему с точностью войти с Wandb и Deepspeed
    Anonymous » » в форуме Python
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»