Авторизация через Яндекс ID

Авторизация через Яндекс ID

Компонент, открытый исходный код

Компонент авторизации через Яндекс ID для InstantCMS 2.18.1 (на более ранних версиях не проверял).

Возможности:

  • вход и регистрация через Яндекс ID;
  • автоматическая привязка аккаунта по email;
  • генерация логина из email;
  • назначение группы пользователя при регистрации;
  • поддержка ленты активности InstantCMS;
  • компактная кнопка Яндекс ID под формой входа и регистрации;
  • безопасная OAuth2 авторизация через Яндекс.
  • Вывод формы через хуки (под формой авторизации и регистрации).

Client ID приложения Яндекс и Client Secret приложения Яндекс брать тут

0
skewes skewes 5 месяцев назад #

Прикольная штукенция!

Но вот я авторизовался и у меня почему-то данные подцепил только логин, аватарку и дату рождения не проставил.

Но в целом зачетно! Спасибо большое!

0
LockD LockD 5 месяцев назад #

В следующем обновлении исправлю

0
LockD LockD 5 месяцев назад #

Выпустил обновление с исправлением и чисткой кода

0
skewes skewes 5 месяцев назад #

Спасибо большое! Завтра уже гляну)))

А как обновляться? Или просто файлы на серваке заменить на новые?

Ну и ключи заново проставить от яши.

0
skewes skewes 5 месяцев назад #

И как донатик вам отправить?

На печенюшки и кофе)))

0
LockD LockD 5 месяцев назад #

спасибо, справа ссылка

0
skewes skewes 5 месяцев назад #

спасибо, справа ссылка

блин, точно, я что-то искал, не мог найти))) 😂

Завтра закину! 

0
LockD LockD 5 месяцев назад #

Перемести файлы с заменой.

0
skewes skewes 5 месяцев назад #

Fatal error: Uncaught Error: Undefined constant «LANG_YANDEXAUTH_LOGIN public_html/system/controllers/yandexauth/frontend.php on line 58

Весь код не стал скидывать, но вот такая ошибка выходит. Видимо что-то лишнее присутствует...

Установка с ноля, через админку, версия инстанта последняя, то есть 2.18.1

На остальных сайтах старая версия — 1.0.41 — работает без нареканий.

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

0
LockD LockD 5 месяцев назад #

проблема с языковым пакетом попробуй эту сборку https://disk.yandex.ru/d/YCn36Fns8CmlUA

0
skewes skewes 5 месяцев назад #

Скачал, заменил один файл frontend.php, все заработало.

Аватарку подцепил, но дату рождения не подцепил...

Потом обновил все файлы, вошел опять под своей учеткой, но дату рождения опять не подцепил. Видимо потому что заходил до этого...

Сейчас проверю на других сайтах, но и там скорее всего не получится, так как уже заходил до этого. А еще одной почты вроде нет в Яндексе, чтоб проверить...

Ну в общем отпишусь, что получилось)))

0
LockD LockD 5 месяцев назад #

Будут еще ошибки, присылай в лс, буду сразу исправлять (дата должна подтягиваться для новых пользователей)

0
DeusSpa DeusSpa 4 месяца назад #

Ни чего не подтягивается не для Гугла, не для Яндекс. 

Регистрация пользователей с нуля.

Что подтягивает Аватар, и почту из которой делает Ник.

Дата рождения, пол, Город не тянет, хотя что в Яндекс, что в Гугл это есть. Так же есть момент игнорит, то что на сайте эти поля обязательны.

Хотя бы, перекидывал на страницу настройки пользователя после авторизации чтобы он ввел недостающее.

-назначение группы пользователя при регистрации;
А это ГДЕ настраивается. если ранее в uLogin прямо в компоненте это было — выбор группы.


-компактная кнопка Яндекс ID под формой входа и регистрации;

....

0
skewes skewes 5 месяцев назад #

Закинул вам на кофе)))

Спасибо большое за классную штуковину)))

Буду ждать, когда исправите этот момент и обновлю на других сайтах)))

0
LockD LockD 5 месяцев назад #

спасибо

0
pupsik pupsik 5 месяцев назад #

Молодец! Это дело можно спокойно править под Гоогля логин :) Пока не надо, но на заметки себе взял. А то я себе сделал, но как-то через ж**у. Таким способом лутше будет.

0
skewes skewes 5 месяцев назад #

Удалил полностью компонент на одном сайте.

Решил поставить с нуля. Версия оказывается уже 1.0.43...

Поставил, авторизовался, фотку подцепил, иду в профиль, ошибка работы с опенграфом...

Fatal error: Uncaught TypeError: opengraph::setBasicOpenGraph(): Argument #3 ($description) must be of type string, null given, called… public_html/system/controllers/opengraph/frontend.php on line 115

При этом, на первом сайте стоит версия 1.0.42. Там все работает. Но я его ставил чистым, а второй сайт обновленный...

Захожу в профиль, ошибок нет. 

Сейчас поставлю 1.0.41. Откачусь.

0
skewes skewes 5 месяцев назад #

https://instantcms.ru/forum/mikroformat-open-graph-uncaught-typeerror.html — вроде решает проблему)))

0
LockD LockD 5 месяцев назад #

в следующем обновлении постараюсь исправить конфликт компонентов

0
pupsik pupsik 5 месяцев назад #

Переделал плагин под Гоогля.

Изображение

P.S. Но заметил одну весч. Если вы в админке УДАЛИТЕ одного из юзеров (которые зашли под Яндех логин. То этот человек уже никогда не зайдет под этим аккаунтом, так как он до сих пор будет висеть в cms_yandexauth_accounts.

0
pupsik pupsik 5 месяцев назад #

Еще, если вы заметили, этих Яндех юзеров нет в списке.

anilibrix.ru/users

В файле: callback.php

'is_locked'     => 0

Надо поменять 0 на NULL

0
LockD LockD 5 месяцев назад #

да, спасибо

0
skewes skewes 5 месяцев назад #

Здравствуйте. А VK ID нет возможности сделать по аналогии?

Было бы круто, если б например есть Яндекс ниже строка или VK ID.

Точно не знаю, но он может и mail.ru привязывает? Тогда бы вообще пушка была бы))))))

0
LockD LockD 5 месяцев назад #

VK ID сейчас требует ИП, поэтому у меня нет возможности реализовать данный компонент

0
skewes skewes 5 месяцев назад #

А как правильно обновиться с версии 1.0.43 ?

Скачать и просто заменить файлы?

0
skewes skewes 5 месяцев назад #

Удалил компонент старый и поставил новый.

почему то в авторизации появилось это:

Изображение

В регистрации вообще две кнопки теперь:

Изображение

0
LockD LockD 5 месяцев назад #

Кнопка теперь выводится хуком, отключи вывод через настройки компонента или открой файл /templates/ВАША_ТЕМА/controllers/auth/register.tpl.php
найди и удали этот код:

  1. <?php
  2. $yandexauth = cmsCore::getController('yandexauth');
  3.  
  4. if ($yandexauth && method_exists($yandexauth, 'renderAuthButton')) {
  5. echo $yandexauth->renderAuthButton('register');
  6. }
  7. ?>
LockD LockD 5 месяцев назад #
Комментарий удален
0
LockD LockD 5 месяцев назад #

Это текст самой формы авторизации cms который включается при активации хука.

Открой \templates\default\controllers\yandexauth\button.tpl.php
и замени весь код на этот:

  1. <?php
  2. $text = !empty($button_text) ? $button_text : 'Войти с Яндекс ID';
  3. ?>
  4. <style>
  5. .yandexauth-doc-block{
  6. width:100%;
  7. margin:14px 0 0;
  8. text-align:center;
  9. box-sizing:border-box
  10. }
  11. .yandexauth-doc-separator{
  12. display:flex;
  13. align-items:center;
  14. justify-content:center;
  15. gap:12px;
  16. margin:0 0 12px;
  17. color:#8f91a3;
  18. font-size:13px;
  19. font-weight:700;
  20. line-height:1;
  21. text-transform:uppercase
  22. }
  23. .yandexauth-doc-separator span{
  24. display:block;
  25. height:1px;
  26. flex:1 1 auto;
  27. max-width:120px;
  28. background:#d9ddec
  29. }
  30. .yandexauth-doc-button,
  31. .yandexauth-doc-button:visited{
  32. display:inline-flex;
  33. align-items:center;
  34. justify-content:center;
  35. gap:12px;
  36. width:100%;
  37. max-width:360px;
  38. min-height:48px;
  39. padding:0 18px;
  40. box-sizing:border-box;
  41. border:0;
  42. border-radius:12px;
  43. background:#000;
  44. color:#fff!important;
  45. text-decoration:none!important;
  46. font-size:18px;
  47. font-weight:700;
  48. line-height:1.1;
  49. cursor:pointer
  50. }
  51. .yandexauth-doc-button:hover{
  52. opacity:.92;
  53. color:#fff!important;
  54. text-decoration:none!important
  55. }
  56. .yandexauth-doc-icon{
  57. display:inline-flex;
  58. align-items:center;
  59. justify-content:center;
  60. flex:0 0 auto;
  61. width:30px;
  62. height:30px;
  63. border-radius:50%;
  64. background:#fc3f1d;
  65. color:#fff;
  66. font-family:Arial,sans-serif;
  67. font-size:21px;
  68. font-weight:700;
  69. line-height:1
  70. }
  71. .yandexauth-doc-text{
  72. display:inline-block;
  73. white-space:nowrap
  74. }
  75. @media (max-width:480px){
  76. .yandexauth-doc-button,
  77. .yandexauth-doc-button:visited{
  78. max-width:100%;
  79. min-height:44px;
  80. border-radius:10px;
  81. gap:10px;
  82. padding:0 14px;
  83. font-size:16px
  84. }
  85. .yandexauth-doc-icon{
  86. width:26px;
  87. height:26px;
  88. font-size:18px
  89. }
  90. }
  91. </style>
  92.  
  93. <script>
  94. (function(){
  95. function textOnly(el){
  96. return (el && el.textContent ? el.textContent : '').replace(/\s+/g, ' ').trim();
  97. }
  98.  
  99. function hideInstantCmsSocialTitle(){
  100. var yandexBlock = document.querySelector('.yandexauth-doc-block[data-yandexauth-block="1"]');
  101. if (!yandexBlock) { return; }
  102.  
  103. var badTexts = {
  104. 'или': true,
  105. 'Войдите через': true,
  106. 'или Войдите через': true
  107. };
  108.  
  109. var box = yandexBlock.closest('form') ||
  110. yandexBlock.closest('.modal') ||
  111. yandexBlock.closest('.modal-content') ||
  112. yandexBlock.closest('.window') ||
  113. yandexBlock.closest('.icms-modal') ||
  114. yandexBlock.parentNode ||
  115. document.body;
  116.  
  117. if (!box) { return; }
  118.  
  119. var nodes = box.querySelectorAll('h1,h2,h3,h4,h5,h6,div,p,span,b,strong,legend');
  120. for (var i = 0; i < nodes.length; i++) {
  121. var el = nodes[i];
  122.  
  123. if (el.closest('.yandexauth-doc-block')) {
  124. continue;
  125. }
  126.  
  127. var txt = textOnly(el);
  128.  
  129. if (badTexts[txt]) {
  130. el.style.setProperty('display', 'none', 'important');
  131. el.setAttribute('data-yandexauth-hidden-instantcms-title', '1');
  132. }
  133. }
  134.  
  135. // Отдельно убираем текстовый узел "или", если он выведен без тега.
  136. var walker = document.createTreeWalker(box, NodeFilter.SHOW_TEXT, null);
  137. var textNodes = [];
  138. while (walker.nextNode()) {
  139. textNodes.push(walker.currentNode);
  140. }
  141.  
  142. for (var j = 0; j < textNodes.length; j++) {
  143. var n = textNodes[j];
  144. if (n.parentNode && n.parentNode.closest && n.parentNode.closest('.yandexauth-doc-block')) {
  145. continue;
  146. }
  147. if ((n.nodeValue || '').replace(/\s+/g, ' ').trim() === 'или') {
  148. n.nodeValue = '';
  149. }
  150. }
  151. }
  152.  
  153. if (document.readyState === 'loading') {
  154. document.addEventListener('DOMContentLoaded', hideInstantCmsSocialTitle);
  155. } else {
  156. hideInstantCmsSocialTitle();
  157. }
  158.  
  159. setTimeout(hideInstantCmsSocialTitle, 100);
  160. setTimeout(hideInstantCmsSocialTitle, 500);
  161. setTimeout(hideInstantCmsSocialTitle, 1000);
  162.  
  163. if (window.MutationObserver) {
  164. new MutationObserver(hideInstantCmsSocialTitle).observe(document.documentElement, {
  165. childList: true,
  166. subtree: true
  167. });
  168. }
  169. })();
  170. </script>
  171.  
  172.  
  173. <div class="yandexauth-doc-block yandexauth-build-41" data-yandexauth-block="1">
  174. <div class="yandexauth-doc-separator">
  175. <span></span>
  176. <b>или</b>
  177. <span></span>
  178. </div>
  179. <a class="yandexauth-doc-button" href="<?php echo html($auth_url); ?>" rel="nofollow">
  180. <span class="yandexauth-doc-icon">Я</span>
  181. <span class="yandexauth-doc-text"><?php echo html($text); ?></span>
  182. </a>
  183. </div>
  184.  
+1
skewes skewes 5 месяцев назад #

Спасибо большое!!!

Полет нормальный)))

0
skewes skewes 5 месяцев назад #

Подскажите пожалуйста, не могу понять где и как убрать слово «или» на странице авторизации.

Этот текст уже давно там, до установки Гугла, времени не было написать, не пойму как убрать.

Вро файл лэнгвич смотрел, но она не там вроде

Изображение

А еще включил/отключил кнопку в Яндекс «Показывать кнопку под формой входа» и после входа на сайт по своему логину — не по ай ди показывает так:

Изображение

Раньше я кнопку не трогал вообще в менюшке, вот «потрогал»… Но это когда я уже авторизован, если не авторизован, то все ок показывает. Только «или» остается.

0
DeusSpa DeusSpa 4 месяца назад #

Это видимо по умолчанию есть в instant, и да как то оно… в общем тут

templates\default\controllers\auth\widgets\auth 

Редактируем/комментируем строку

  1. <!--<div class="widget_log_in_openid_title"><?php echo LANG_LOG_IN_OPENID; ?></div>-->

в данном блоке

  1. <?php if($hooks_html){ ?>
  2. <div class="widget_log_in_openid">
  3. <!--<div class="widget_log_in_openid_title"><?php echo LANG_LOG_IN_OPENID; ?></div>-->
  4. <?php echo html_each($hooks_html); ?>
  5. </div>
  6. <?php } ?>

и тогда надписи уйдет с формы авторизации, в регистрации не должно быть данного хука, но если у вас там выводится то проделайте так же. 

Аналогично в templates\default\controllers\auth файл login.tpl.php

в низу ищем блок и  комментируем две строки

  1. <?php if($hooks_html){ ?>
  2. <!--<div class="center_cell"><?php echo LANG_OR; ?></div>-->
  3. <div class="right_cell">
  4. <!--<h3><?php echo LANG_LOG_IN_OPENID; ?></h3>-->
  5. <?php echo html_each($hooks_html); ?>
  6. </div>
  7. <?php } ?>
0
DeusSpa DeusSpa 4 месяца назад #

хм так если автор данного приложения не будет использовать свои css для ИЛИ, а возьмёт готовый из системы чтобы обновы не ломали снова..

То нужно это все:

  1. <div class="yandexauth-doc-separator">
  2. <span></span>
  3. <b>или</b>
  4. <span></span>
  5. </div>
  6.  
  7. тут span выступает как после и до - черта до и после ИЛИ
  8.  
  9. .yandexauth-doc-separator {
  10. display: flex;
  11. align-items: center;
  12. justify-content: center;
  13. gap: 12px;
  14. margin: 0 0 12px;
  15. color: #8f91a3;
  16. font-size: 13px;
  17. font-weight: 700;
  18. line-height: 1;
  19. text-transform: uppercase;
  20. }
  21. .yandexauth-doc-separator span {
  22. display: block;
  23. height: 1px;
  24. flex: 1 1 auto;
  25. max-width: 120px;
  26. background: #d9ddec;
  27. }

заменить/повешать на готовый класс которые как раз вылазят при вызове хука

<div class=«center_cell»>или</div>

  1. .center_cell {
  2. display: flex;
  3. align-items: center;
  4. justify-content: center;
  5. gap: 12px;
  6. margin: 0 0 12px;
  7. color: #8f91a3;
  8. font-size: 13px;
  9. font-weight: 700;
  10. line-height: 1;
  11. text-transform: uppercase;
  12. position: relative; /* важно для позиционирования псевдоэлементов */
  13. }
  14.  
  15. .center_cell::before,
  16. .center_cell::after {
  17. content: ''; /* обязательно для отображения псевдоэлемента */
  18. display: block;
  19. height: 1px;
  20. flex: 1 1 auto;
  21. max-width: 120px;
  22. background: #d9ddec;
  23. }
  24.  

тем самым отказаться в пользу системного, и переопределять своими стилями при под грузке кнопки как сейчас. Тогда ни где ни чего не сломается в будущем.

Так же можно передать стили надписи расположив их и тп по центру и в стиль ИЛИ, или же просто скрывать с виду классами

<div class=«right_cell»>
        <h3>Войдите через</h3>

Тут уже как LockD решит, думаю будет правильнее использовать системные надписи.

🍪Мы используем файлы cookie для работы сайта. Читать подробнее.