Как сделать обязательным email у oAuth провайдеров?

Google+ отдает email без каких либо вопросов. Но Vk и Facebook, в моем случаи позволяют запретить отдавать email сервису. При чем Vk вообще не отдает, даже не пользовател не отклоняет передачу email`а. На других сайта видел реализации, как у Facebook, так и у Vk (вроде бы), где пользователь обязан предоставить email
  • Вопрос задан
  • 2689 просмотров
Решения вопроса 1
@askarik
веб-разработчик
как раз недавно работал с этим
решение есть, просто кода много будет если я его выложу здесь
опишу всё так, если не понятно спросите, отвечу

в общем facebook: да, здесь есть такая ерунда, что сама социалка позволяет убрать галочку пользователю, но есть АПИ метод, который может узнать, какие права дал нам этот пользователь а именно
/me/permissions?access_token=
если в ответе от АПИ, в массиве для email status == decline - то нет прав, если granted - то есть
если нет, можно запросить доступ к email заново
header("HTTP/1.1 302 Found");
header(
'Location: '.$cfg['urls']['authorize_endpoint'].
'auth_type=rerequest&'.//этот парам. указывает что надо сделать перезапрос доступа к email пользователя (не получится отказать в доступе к email)
'client_id='.$cfg['client_id'].'&'.
'response_type='.$cfg['response_type'].'&'.
'state='.$cfg['state'].'&'.
'scope='.$cfg['scope'].'&'.
'redirect_uri='.$cfg['urls']['redirect_uri']);


тут то уже пользователь не сможет галочку снять, либо ОК либо ОТМЕНА

что касается ВК:
тоже всё легко, используй OAuth 2.0
header("HTTP/1.1 302 Found");
header(
'Location: '.$cfg['urls']['authorize_endpoint'].
'client_id='.$cfg['client_id'].'&'.
'response_type='.$cfg['response_type'].'&'.
'scope=email&'.//вот оно то место, где ты запрашиваешь email
'v='.$cfg['v'].'&'.
'redirect_uri='.$cfg['urls']['redirect_uri']);

если используешь OAuth 2.0, там галочку для email снять нельзя
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы