• Каковы основные принципы регистрации и авторизации через социальные сети OAuth2?

    hbuser
    @hbuser Автор вопроса
    Отвечу сам себе.
    Здесь есть полезная конкретная информация о технической реализации.

    А если вкратце, то...

    Для авторизации, регистрации используется все та же таблица 'users'. Вместе с обычной регистрацией и авторизацией, когда при регистрации (в самом простом виде) в таблицу 'users' добавляются email, password и login пользователя, а при авторизации проверяется соответствие введенных login'а и password'а существующим в базе данных, аналогичным образом используется и регистрация/авторизация через социальные сети. Только в данном случае источником данных о пользователе для его регистрации является не непосредственный пользователь, который вводит данные в форму, а соц. сеть. Регистрация в данном случае достаточно прозрачная, т.е. не видна пользователю. Схема примерно следующая (без особенностей работы Oauth-протокола):


    1) Пользователь выбирает вход через соц. сеть.
    2) Происходит обращение к странице авторизации в этой соц. сети, если человек еще не авторизовывался там. После ввода данных, а если он ранее авторизовывался, происходит запрос на разрешение использования его данных.
    3) Если человек отказывается, то на этом конец. Если дает согласие, то выполняется перенаправление на указанную в настройках Oauth страницу сайта.
    4) У каждого пользователя в соц. сетях есть свой уникальный идентификатор, который можно запрашивать. Для своей таблицы 'users' нужно добавить пару дополнительных полей (например, вот такие): auth_via (enum('native, 'vk', 'mailru', '...')) - для обозначения типа регистрации пользователя, и social_id - здесь будет храниться уникальный идентификатор в соц. сети. Если нужно хранить какие-то специфические данные этого пользователя из соц. сетей, то можно создать доп. поля для этих данных.
    5) После того, как пользователь дал разрешение на использование его данных, необходимо запросить нужные данные от соц. сети, в т.ч. и идентификатор пользователя в соц. сети. Вот здесь и начинается невидимый процесс регистрации. Нужно проверить есть ли в БД пользователь с таким social_id, если нет, то вставляем social_id, данные пользователя из соц. сети, по необходимости, в БД. Все, пользователь зарегистрирован.
    Если же данные о пользователе есть, то необходимо запросить актуальные данные из соц. сети, сравнить их с теми, что в базе и если они изменились, то обновить их и в своей базе данных, если нет, то просто переходим к следующему шагу.
    6) Создается сессия с данными пользователя.

    Таким образом, к существующей таблице "родной" регистрации пользователей сайта присоединяется, условно говоря, таблица, поля, необходимые для регистрации/авторизации через соц. сети., и друг-другу они не мешают.

    ca4a4b263fd1424085988c9deaeb6d5b.png

    Для пользователя, зарегистрированного из соц. сети пароля и логина, естественно, нет. Они нужны для авторизации. А т.к. пользователь авторизуется с помощью своих логина и пароля в соц. сети, то и указывать здесь нечего. И еще, можно при авторизации, к запросу проверки логина и пароля, добавить условие

    'AND WHERE `auth_via`="native"'

    , чтобы исключить пользователей, зарегистрированных из соц. сетей.

    Как видно, для каждого пользователя в таблице создается внутренний (внутрисайтовый, если так можно выразиться) первичный, автоинкрементный ключ. Соответственно, нет разницы для логики сайта между пользователем, зарегистрированным через соц. сеть и через сайт. Если говорить об интернет-магазине, то, для привязки заказов к пользователю, можно использовать единый, внутренний идентификатор ID.
    Ответ написан
    3 комментария
  • "Выезжающий" div из ссылки?

    Wott
    @Wott
    Эээ, два вложенных дива, где верхний с overflow:hidden потихоньку раздуваем от центра.
    animate и step в нем — чего тут сложного?
    Ответ написан
    Комментировать
  • "Выезжающий" div из ссылки?

    anaximen
    @anaximen
    jqueryui.com/demos/show/
    эффект scale. располагаешь div так чтобы ссылка была по центру и вызываешь эффект.
    Ответ написан
    1 комментарий
  • Оплата услуг сервиса по подписке?

    @hexen
    Я советую использовать максимально широко все возможные каналы приема платежей в свою систему.
    Этого можно достичь очень быстро, подключившись к какому-нибудь интегратору (их несколько можно повыбирать), например Робокасса.
    Одним махом станут доступны многочисленные способы приема платежей, такие как:
    1. С кредитных карт Visa, Mastercard.
    2. Со счета мобильного телефона
    3. Через систему Контакт.
    4. Через банкоматы многих банков.
    5. Через многочисленные терминалы приема платежей, в том числе и QIWI
    6. Через многочисленные платежные системы, вроде WebMoney
    Ответ написан
    2 комментария
  • Бюджетный вариант монитора для дизайна

    DezmASter
    @DezmASter
    LG W2220P. Стоит около 9к. Соотношение цены к качеству отличное.
    hotline.ua/tx/lg_flatron_w2220p/
    Ответ написан
    Комментировать
  • Asp.net и деревья?

    @Neir0
    Так можно просто рекурсивно все вывести. Примерно вот так:

    var str = @"<root>
    		<item name=""test1"">
    			  <item name=""test11"">
    				   <item name=""test111"" />
    				   <item name=""test112"" />
    			  </item>
    			  <item name=""test12"" />
    		</item>
    		<item name=""test2"" />
    	</root>";
    	
    	
    	var rootNode = XElement.Parse(str);
    	
    	OutNode(rootNode);
    
    
    void OutNode(XElement rootNode)
    {
        Console.WriteLine ("ul");
        foreach(var node in rootNode.Elements().Where(x => x.Name=="item") )
    	{
    	   Console.WriteLine ("li");
    	    Console.WriteLine (node.Attribute("name").Value);
    	    if(node.HasElements)   OutNode(node);
    	  Console.WriteLine ("/li");
    	}
       Console.WriteLine ("/ul");
    }
    
    


    Ну и оформить прямо в шаблоне, методе хелпере или как удобно.
    Ответ написан
    Комментировать
  • Оплата услуг сервиса по подписке?

    Если мы говорим про Qiwi то все относительно просто (по бОлшей части все просто)
    Мы спрашиваем пользователя его телефон (мобильник) и выписываем ему счет. Запоминаем у себя телефон, номер счета и чего вообще пользователь купил. Отправляем в qiwi счет и тупо ждем его оплаты. Как только человек оплатил, к нам приходит запрос от qiwi где указан номер счета (ну или запрос на отклонение оплаты). Все. Вы имеете факт оплаты, можно отдавать контент/товар.
    Ответ написан
    3 комментария
  • Оплата услуг сервиса по подписке?

    JeanLouis
    @JeanLouis
    Наиболее адекватная подписка, по-моему мнению, это подписка через карты Visa/MasterCard. Деньги сможете снимать сами в нужный момент.
    Ответ написан
    Комментировать
  • Оплата услуг сервиса по подписке?

    @dakmaev
    Ну есть разные способы. Смотря что хотите.
    Например через СМС, там 40-60% будет не вам доставаться, но есть услуги подписок. То есть заключаете договор с компанией агрегатором, создаете проект. После этого, человек может подписаться на услугу на вашем сайте, частоту вы сами выставляете. Например раз в неделю абоненту будет приходить смс, типа отправте смс на такой то номер, чтобы продлить подписку на такую то услугу, на таком то сайте, отписаться можно по этому номеру.
    Можно через платежные терминалы, QIWI или еще что, там процент меньше.

    В общем смотря, что за услуги собираетесь оказывать.
    Ответ написан
    1 комментарий
  • Системы для организации обращений в сапорт

    @Bodik
    из платных kayako, cerberus, ubersmith, deskpro. Все они довольно простые для рядовых, но таки много внутри разных (наверно таки на ранней стадии) ненужных вещей. Рекомендую каяко, самая легкая и красивая.

    Из бесплатных не встречал ничего полезного, все допиливать надо самим — bestpractical.com/rt/, osticket.com/tour/. Еще присмотритесь к otrs.org/demo/.
    Ответ написан
    1 комментарий
  • Audio Unit Effect for iPhone?

    @Limosha
    Пробовал сделать такие вещи через AudioUnit в iPhone. Ничего не получилось, в эппловской документации как-то об этом очень скудно написано. Единственное что получилось — сразу же передавать звук входящий в микрофон на динамики либо наушники.

    Если есть понимание природы звука можно попробовать самому его преобразовать :)
    Ответ написан
    2 комментария
  • Бюджетный вариант монитора для дизайна

    dom1n1k
    @dom1n1k
    Я недавно купил Dell U2311H. В целом доволен, хотя и есть «нюансы».

    1. Мелковат пиксель, стандартные шрифты в ОС и интернеты выглядят мелко. Если это критично, имеет смысл посмотреть на U2211H, который к тому же и дешевле.
    2. Киношный формат 16:9 применительно к работе слишком уж растянут, предпочел бы 16:10.
    3. Долго не мог поймать оптимальные яркость/контрастность, чтобы было комфортно серфить по инету в темной комнате — большое белое поле просто слепило. А притушишь — днем уже немного тускловато. Но где-то через пару недель устаканилось — наверное, глаза адаптировались?

    На мониторе работаю (ФШ, HTML-верстка, немного программирования) и брожу по инету. Кино на компе смотрю редко. Игр нет вообще. По идее, нужно было бы брать «полноценный» U2410 — но он на момент моей покупки почему-то резко исчез из магазинов. А главное, он в ~1.5 дороже — пожадничал.

    Помимо Делла, тестировал в магазине Nec EA231Wmi (оказался с битым пикселем + существенно дороже) и Samsung F2380 на C-PVA (показался также вполне достойным вариантом, хотя конечно условия просмотра были «полевые»).
    Ответ написан
    1 комментарий
  • Бюджетный вариант монитора для дизайна

    @Smolka
    ViewSonic vp2365wb
    Очень советую присмотреться. Продолжительное время я профессионально занимался фотоделом (фотолабы: настройка, обслуживание, печать).
    В августе выбирал бюджетный монитор для дома и удовольствия (фотки, тексты, киношки, фотошоп). Требования были простые: достойная цветопередача, приличные углы обзора, FullHD. Выбирал дотошно, остановился на нём.

    Достоинства (подробнее читайте мой отзыв на я-маркете):
    — Матрица e-IPS, FullHD (чистые сочные цвета, реальные углы обзора без искажения изображения: ~100 градусов по горизонтали, до 90 град. по вертикали).
    — Не плохая заводская калибровка.
    — ViewSonic позиционирует монитор как профессиональный, это нам даёт 3 года гарантии, которая распространяется в том числе и на сбойные пиксели (да-да это так, если точка выгорит, то это гарантийный случай!) + качественная сборка.
    — порадовала удобная высокая подставка.
    Недостатки:
    — Светодиод на передней панели залепил сразу чёрной изолентой.
    — Мой экземпляр немного жужжит на яркости до 94%.
    — Заметный градиент (к жёлтому) на сером всё же есть. Но он есть (и заметнее) в более дорогих профмоделях
    — При больших углах (~ >100 градусов) чёрный серебрит, фиолетит, малиновит, соответственно падает контраст и немного уходят цвета (чем больше угол, тем сильнее «эффекты»). Об этом знал, всё устраивает.

    Выбирал из того, что было в продаже:
    Dell 2209WA (это косяк, а не монитор… много брака)
    NEC EA231WMi (функциональнее… имею ввиду менюшку)
    DELL U2311H, DELL U2211H (ярче, контрастнее, функциональнее по настройкам, НО!… читай ниже..)
    Samsung F2380 (тормозной, заметен сдвиг по цветам уже при ёрзаньи на стуле, хотя чёрный — да, действительно чёрный и детали не теряются)
    Кроме того, у выше перечисленных мониторов на eIPS матрице бОльшая неравномерность подсветки, ИМХО меньше деталей в чёрном… вероятно, из-за большей контрастности.

    Учитывая вышеперечисленное, закономерные особенности eIPS и наличие гарантии на матрицу, я взял viewsonic. По-прежнему доволен и рекомендую как бюджетную рабочую лошадь.
    Надеюсь, что сэкономил вам время.
    Ответ написан
    2 комментария
  • Бюджетный вариант монитора для дизайна

    Horse
    @Horse
    Dell UltraSharp U2311H
    Ответ написан
    Комментировать
  • Как заставить себя учиться?

    LIAL
    @LIAL
    Вначале пойми для чего ты хочешь самообразоваться, исходя из приведенного примера:

    > располагаю личным временем для самообразования (напр изучение java)
    для того чтобы просто выучить java или потом использовать ??

    если первое, те чтобы было — то ситуация как раз из твоей области, мозг думает нафига ему это
    если второе, то ставь цель: помимо обучения сделать то-то или то-то. Потом ставь цель, разбей этапы до нее на части и постарайся прописать по времени, когда и как должны быть эти части выполнены. Одно что останется — следовать намеченному плану и видеть маленькие результаты при достижении этих этапов. Тк если не будет хоть-какого либо положительного результата (читай достижения вначале одного этапа, потом другого и тд), то общая цель маячит сильно далеко и рано или поздно «сдуваешься»

    В таком случае для тебя необходимо усилие по тому чтобы достигать эти небольшие частные цели, для того чтобы потом придти к общей.
    Ответ написан
    4 комментария
  • Вычислить высоту(в пикселях) NSTextField в Cocoa?

    int80h
    @int80h
    Что-то вроде этого?

    NSTextField* textField;
    
    ...
    
    NSRect rect = [textField bounds];
    
    NSLog(@"%@", NSStringFromRect(rect));
    
    Ответ написан
    Комментировать
  • Лучшая ORM для C#

    kosmonaFFFt
    @kosmonaFFFt
    Senior Java Developer.
    NHibernate.
    Т. к. пользовался только им, другой посоветовать не могу… Еще можно попробовать EntityFramework, но мне в нем, после использования NHibernate, не понравилась конфигурация отображения объектов на базу.
    Ответ написан
    Комментировать