Авторизация CakePHP (неправильный подход?)

Я использовал CakePHP 2.4.4, facebook_php_sdk и пытался создать свою собственную функцию для создания пользователя через логин facebook/linkedin.

Насколько я понимаю, facebook не извлекает пароль, поэтому я создал пароль с пробелом и хешировал его перед сохранением. Причина, по которой я сделал это, заключается в том, что для «Аутентификации входа» требуется имя пользователя (которое я указал как адрес электронной почты) и пароль (что мне не очень ясно в отношении предоставленной аутентификации CakePHP, и здесь может быть неправильный подход для этого).

Проблема, с которой я столкнулся прямо сейчас, заключается в том, что пользователь выполняет ручное создание через «[email protected]» и, например, вводит простой пароль. Позже, если этот Пользователь войдет через facebook, созданный с тем же адресом электронной почты «[email protected]», он / она не сможет войти в систему, поскольку в базе данных уже есть этот адрес электронной почты.

Я почти уверен, что что-то там пошло не так, но не знаю, с чего начать, любое руководство и указание будут очень признательны.

Вот как я вхожу через Facebook:-

    $user_profile = $facebook->api('/me','GET');
    $this->request->data['User']['username'] = $user_profile['email'];
    $this->request->data['User']['password'] = ' ';
    $this->Auth->login()

Пользователь создан через facebook:-

$data = array(
  'name'     => $user_profile['name'],
  'username'    => $user_profile['email'],
  'email'    => $user_profile['email'],
  'password' => ' ',
  'create_source' => 1 //Used this to differentiate from fb or linkedin
);

$this->User->save($data);

Спасибо за ответы XuDing, которые я должен сделать :-

$this->Auth->login($user)

Еще один сценарий: что, если пользователь захочет выполнить вход вручную, когда учетная запись изначально была создана с помощью входа через Facebook?


person Eric T    schedule 15.01.2014    source источник
comment
Я не знаком с API facebook или linkedIn, но я думаю, что если нет причин, связанных с API, чтобы различать, какой из них учетная запись была изначально создана, вам не следует различать их и разрешать пользователям входить в систему из либо на учетную запись для этого адреса электронной почты.   -  person Kai    schedule 15.01.2014
comment
Спасибо, Кай, я сделал это по совету XuDing, и у меня есть еще один сценарий, который я обновил внизу поста.   -  person Eric T    schedule 15.01.2014


Ответы (1)


Если имя пользователя (адрес электронной почты) уже существует, вы можете найти его с помощью идентификатора Facebook и войти в него напрямую, используя $this->Auth->login($user). Посмотрите этот код плагина, он содержит полную логику входа через Facebook:

function __syncFacebookUser

https://github.com/webtechnick/CakePHP-Facebook-Plugin/blob/master/Controller/Component/ConnectComponent.php#LC129

person XuDing    schedule 15.01.2014
comment
Хороший @XuDing, я почти забыл, что это может мне очень помочь $this-›Auth-›login($user). У меня есть еще один вопрос: что, если пользователь хочет выполнить вход вручную, но учетная запись изначально создается API facebook? - person Eric T; 15.01.2014
comment
В этом случае вы можете разрешить им обновлять пароль на странице настроек. после обновления они смогут войти в систему как обычно. - person XuDing; 15.01.2014