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

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

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

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

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

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

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

0
skewes skewes 16 дней назад #

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

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

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

0
LockD LockD 16 дней назад #

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

0
LockD LockD 11 дней назад #

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

0
skewes skewes 11 дней назад #

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

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

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

0
skewes skewes 11 дней назад #

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

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

0
LockD LockD 11 дней назад #

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

0
skewes skewes 11 дней назад #

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

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

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

0
LockD LockD 11 дней назад #

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

0
skewes skewes 10 дней назад #

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 10 дней назад #

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

0
skewes skewes 10 дней назад #

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

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

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

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

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

0
LockD LockD 10 дней назад #

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

0
skewes skewes 10 дней назад #

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

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

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

0
LockD LockD 10 дней назад #

спасибо

0
pupsik pupsik 10 дней назад #

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

0
skewes skewes 10 дней назад #

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

Решил поставить с нуля. Версия оказывается уже 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 10 дней назад #

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

0
LockD LockD 10 дней назад #

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

0
pupsik pupsik 10 дней назад #

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

Изображение

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

0
pupsik pupsik 10 дней назад #

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

anilibrix.ru/users

В файле: callback.php

'is_locked'     => 0

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

0
LockD LockD 9 дней назад #

да, спасибо

0
skewes skewes 8 дней назад #

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

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

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

0
LockD LockD 8 дней назад #

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

0
skewes skewes 7 дней назад #

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

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

0
skewes skewes 7 дней назад #

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

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

Изображение

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

Изображение

0
LockD LockD 7 дней назад #

Кнопка теперь выводится хуком, отключи вывод через настройки компонента или открой файл /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 7 дней назад #
Комментарий удален
0
LockD LockD 7 дней назад #

Это текст самой формы авторизации 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 7 дней назад #

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

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

0
skewes skewes 15 часов назад #

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

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

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

Изображение

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

Изображение

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

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