"Открытие RSS в закрытых проектах" или "RSS только для зарегистрированных"

Собственно сабж, но для того, кто не понял по полочкам:
1. имеем закрытый! проект А
2. на проекте А регистрация только по инвайтам и
3. зарегистрированный пользователь желает подписаться на RSS, но!

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

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

Прошу помощи в решении данной проблемы.

Update 25 ноября 2009, 01:27
Нашел решение вопроса с использованием поля user_key. Все работает!

Update 25 ноября 2009, ближе к вечеру
Появилась новая проблема. Поле user_key непостоянно и меняется в зависит от сессии (собственно оно и есть ключ сессии).

Update 26 ноября 2009, утро
Ночью перелопатил полдвижка, добавил доп. поле в таблицу, дописал 5-6 функций по аналогии с getUserKey(), обновил данные, извинился перед пользователями.

Все работает, все рады!

13 комментариев

avatar
А собственно, что вы предлагаете? RSS-ридер все равно нельзя научить авторизироваться. Можно открыть RSS ленту для неавторизированных читателей, но тогда потеряете суть закрытости.
avatar
1. RSS-ридер учить и не надо — научили уже :) Если у Вас есть акк на gmail, тогда вы легко можете читать rss ленту новых email сообщений на вашем почтовом ящике через сторонний rss агрегатор.
Онлайн rss-аггрегаторы, такие как Bloglines, становятся все более популярны и под это дело Gmail сделал возможным подписаться на собственную почту через rss. Чем все с радостью и начали пользоваться.©

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

2. Пока писал этот коммент подумал, что можно было бы при закрытом виде ресурса просто напросто добавлять в строку rss логин и пасс (ключ како-нидь) для читающего пользователя.

Т.е. взамен livestreet.ru/rss/comments/3190/ получили бы что-нидь типа livestreet.ru/rss/galo4kin_key-code-comments/3190/, которые просто напросто проверялись на наличие в базе при отображении ленты — самый простой вариант реализации.

Есть желающие помочь в реализации первого или второго решения?!
avatar
У Google есть несколько механизмов удаленной аутентификации, как для сторонних приложений, так и для ссылочной авторизации. У Google вообще много чего есть…

Но если вы хотите, чтобы ваш ридер читал ленту с ls-сайта в авторизированном режиме, то он не сможет это сделать.
avatar
Не знал как обозвать данный вид RSS и вот только сейчас дошло ))
ПРИВАТНЫЕ RSS в студию.

kachayev, а зачем тогда вообще могут быть нужны rss каналы на закрытых проектах, если извне их не прочитать?!

Я мозК!!! n-wp.ru/2088 — плагин для WordPress, которые предлагает вставлять feedkey для приватных rss ))
avatar
вперед. осталось его всего лишь портировать на LS :)
avatar
угум, знать бы как внутри 1+1 сложить хотя бы.
я слабо знаю опп, потому получается все только методом интуиции и тыка.
avatar
Ребята, это круто, я на грани совершенства.
Чувствую, что еще пара пинков извне и я сделаю это чудо техники… угагагага ))
avatar
Эй, троли подпольные, хоть отпишите за что минусуете, эээ!?
avatar
Все! Я ЛСБог своего микро-мира… народ, я сделал это:

1. \classes\actions\Init.class.php — 59
Добавим Router::GetAction()!='rss' к общему списку условий

2. \classes\actions\ActionRss.class.php — 26
if (SITE_CLOSE_MODE){                                           # Если сайт в закрытом режиме
      $FeedId = $aParams[count($aParams=$this->GetParams())-1];     # md5 пользователя из адресной строке
      if (func_check($FeedId,'md5')){                               # проверка формата md5
        if ($oUser=$this->User_GetUserByKey($FeedId)){              # проверка наличия пользователя в базе
          if ($FeedUserActivate = $oUser->getActivate()){           # проверка активированности (пипец) пользователя
            $FeedUserLogin = $oUser->getLogin(); # Пригодится
          }else{
            $this->Message_AddErrorSingle('Пользователь не прошел активацию ;(','404');
    		    return Router::Action('error');
          }
        }else{
          $this->Message_AddErrorSingle('Для данной ленты нет читателей ;(','404');
  		    return Router::Action('error');
        }
      }else{
          $this->Message_AddErrorSingle('Указанной ленты не существует ;(','404');
  		    return Router::Action('error');
      }
    }

3. Во всех шаблонах в конец ссылки к rss добавить
{if $oUserCurrent}{$oUserCurrent->getKey()}{/if}

Ах, да, поставьте кто-нидь на рабочий проект — интересно проТестить «в жизни» :)
Ах, да, покажитескажите, что я крут — потешьте мое самолюбие :)

Update
Ах, да, попробывал поставить — работает
avatar
А вот и не работает данный прием. Но не от того, что мысля неправильная, а от того, что код активации меняется каждый раз при залогинировании (кажется) — странно, активация ведь проходит только при регистрации?! Нет?
avatar
+
Зарегистрированные пользователи вашего ЗАКРЫТОГО проекта теперь могут читать ленты rss

-
Зарегистрированные пользователи вашего ЗАКРЫТОГО проекта теперь легко узнают свой user_code (что в этом может быть страшного?)
avatar
Спасибо всем, кто отказался мне помогать и не отвечал на мои сообщения.
Хак все-таки доделал с использованием дополнительного поля feed_key в таблице.
avatar
Напишите решение проблемы. Сам только обнаружил что rss блочится при закрытом сайте. Очень… очень, нужно.
  • Loci
  • 0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.