• Как организовать социальную аутентификацию через Socialite(Laravel)+JWTAuth+Vue.js без редиректа с API-сервера?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Работает у меня такая схема и в Ionic и в NativeScript.
    В общем схема везде одинаковая.
    Ionic:
    На Laravel нужен Socialite, на клиенте что-то в соответствии с фреймворком. Я использовал ng2-ui-auth. Еще вам нужно установить плагин InAppBrowser.
    Последовательность такая:
    1. В своем приложении вы жмете на кнопку "Войти через GitHub"
    2. Открывается InAppBrowser окно входа GitHub (в урле передается clientId вашего приложения и redirectUri, за это отвечает ng2-ui-auth).
    2а. Обратите внимание что redirectUri из запроса должен быть идентичен Authorization callback URL в настройках вашего приложения на сайте GitHub (Settings / Developer settings / OAuth Apps) и в случае Cordova должен быть равен "localhost:3000".
    3. GitHub авторизирует вас по логину/паролю, спросит разрешения передавать данные Приложению и редиректит страницу на redirectUri добавляя к нему токен.
    4. ng2-ui-auth перехватывает обращение к localhost:3000 (это делается с помощью JS, тут нет никакого локального сервера), достает токен и пересылает его на конечный url (указывается для каждого провайдера в настройках ng2-ui-auth).
    4а. Вот этот конечный url должен быть адресом вашего backend'а, а именно метода, который с помощью Socialite будет запрашивать данные пользователя у GitHub.
    5. С помощь Socialite вы получаете данные о пользователе у GitHub. Создаете пользователя в Laravel, если его нет, и делаете любые другие необходимы действия.
    6. Используя данные пользователя с помощью jwt-auth создаете jwt-токен и возвращаете его клиенту (в пункт 4).
    7. На клиенте запоминаете jwt-токен и тот факт, что пользователь аутентифицирован. Из ответа можете достать email (если вы его передали) и где-нибудь отобразить.
    Все!

    С NativeScript все абсолютно аналогично (там на клиенте я использую nativescript-oauth2) за исключением одного: в NS нет webview, поэтому перехват redirectUri выглядит по-другому:
    1. В Authorization callback URL на GitHub вы пишите что-то вроде blablabla://auth (вместо blablabla какая-то длинная уникальная строка - urlScheme).
    2. Эта urlScheme также пописывается в настройках nativescript-oauth2 и в App_Resources/Android/src/main/AndroidManifest.xml в виде intent-filter
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="blablabla" />
    </intent-filter>

    Приложение перехватывает обращение к этой уникальной urlScheme и дальше все продолжается согласно списка.
    Ответ написан
    1 комментарий
  • Как сделать авторизацию между двумя api?

    Wolfnsex
    @Wolfnsex Куратор тега Веб-разработка
    Если не хочешь быть первым - не вставай в очередь!
    2. Передавать какой-то секретный ключ с сервера АПИ и проверять его на сервере статистики. Этот вариант мне кажется наиболее удобным, но в каком виде его хранить и как передавать?
    Видится мне, что это самый разумный вариант. Список адресов - не слишком надёжен и не особо логичен.

    Как передавать - так же как и сам запрос, в виде параметра, заголовка или любой другой части запроса, которая в конечном итоге будет разбираться на сервере. Как хранить - мы обычно храним в ENV (переменных окружения) или конфигурационных файлах проекта.
    Ответ написан
    2 комментария
  • Как сделать авторизацию между двумя api?

    athacker
    @athacker
    Use client certificate authentication, Luke! Только колхозить подписание запросов не нужно, как рекомендует камрад Кирилл Горелов, достаточно просто TLS наладить. Заодно получите шифрованный канал данных. Если нативно сервер этого не умеет, можно на фронт поставить nginx (у вас же там наверняка какой-нибудь REST или что-нибудь такое, да?), который прекрасно умеет в аутентификацию по клиентским сертификатам.
    Ответ написан
    Комментировать
  • Логирование в разные каналы Slack в Laravel?

    Sanasol
    @Sanasol Куратор тега Laravel
    нельзя просто так взять и загуглить ошибку
    Видимо как-то так?
    'channels' => [
        'slack-critical' => [
            'driver' => 'slack',
            'url' => env('LOG_SLACK_CRITICAL_WEBHOOK_URL'),
            'username' => 'Laravel critical',
            'emoji' => ':boom:',
            'level' => 'critical',
        ],
        'slack-debug' => [
            'driver' => 'slack',
            'url' => env('LOG_SLACK_DEBUG_WEBHOOK_URL'),
            'username' => 'Laravel debug',
            'level' => 'debug',
        ],
    ],
    Ответ написан
    7 комментариев
  • Использование 2-х мониторов и их расположение?

    Adamos
    @Adamos
    DevprXnVQAAWqi0.jpg:large
    появилось желание по фрилансить, с одним будет тяжко

    Из какой маркетинговой задницы выковыривают такие суждения?
    Я понимаю, мне тесновато на 19" 4:3, но у тебя-то в одном 29" таких воткнуто две штуки с припевом.
    Что ты по ним раскладывать собрался, фрилансер?
    Страницы интернета, которые должны в смартфонный экран влезать?
    Код, в котором после сотни символов в строке читаемость упадет до нуля?
    Терминал, изначально рассчитанный под 80х25 символов?..
    Ответ написан
    7 комментариев
  • Какие стратегии повышения зарплаты существуют?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Центральный показатель для бизнеса, а следовательно и руководителей, как людей представляющих интересы этого самого бизнеса - это коэффициент возврата инвестиций (ROI). Соответственно, сотрудник должен приносить компании больше денег, чем потребляет. Естественно, что чем выше разрыв между затратами и прибылью, тем лучше, поэтому фонд оплаты труда руководитель должен держать на том минимальном уровне, который гарантирует бесперебойную работу сотрудников. Один из факторов этой бесперебойности - низкая текучка. Сотрудников терять нежелательно. И чем ценнее для компании сотрудник, чем более он профессионален и/или чем больше на него завязано, тем дороже обходится его потеря. Натурально в деньгах. Придётся затратить больше, чем обычно, денег на поддержание работы без него. Придётся затратить деньги и время (те же деньги) на поиск, найм, введение в работу, возможно, обучение нового сотрудника. При этом он может оказаться совсем неподходящих и цикл придётся повторить. Или может оказаться просто хуже прошлого и эффективность отдела снизится. Поэтому, когда сотрудник приходит просить прибавку, руководитель оценивает может ли этот сотрудник уйти или только блефует, насколько легко его будет заменить, какой урон компании будет нанесён его уходом. Потом руководитель оценивает стоимость расширения ФОТ - есть ли резервы, какой сейчас ROI, будет ли больший ROI от реинвестиции этих средств во что-то другое? Если уход сотрудника будет стоить меньше, чем увеличение ФОТа, сотруднику откажут.

    Естественно, всё описанное справедливо для случая, когда руководитель - профессиональный менеджер. А то часто на месте руководителя сидит человек руководствующийся эмоциями и мутными соображениями вычитанными в сомнительной бизнес-литературе.

    Из этого вывод, стратегия проста - увеличивайте собственный профессиональный уровень на столько, чтобы свободно менять компанию, как только вас что-то перестало устраивать.
    Ответ написан
    4 комментария
  • Как организовать работу в команде через git?

    @Vitsliputsli
    Как уже советовали git-flow (например от Винсента Дрейзена). У разработчиков есть право мержить в dev свои ветки, поэтому request не нужны (они хороши при запросах от удаленных разработчиков), из dev собираете и прогоняете тесты ежедневно (CI), затем из dev собираете релиз и кидаете его в master, это уже делает отдельный человек. На сервере (если речь про прод) git быть не должно, должен быть нормальный CD. И да, никаких доступов к боевым у разработчиков. В остальном верно описали.
    Ответ написан
    Комментировать
  • Как в Laravel продублировать exception?

    SilenceOfWinter
    @SilenceOfWinter Куратор тега PHP
    та еще зажигалка...
    try {
        User::create(['email' => $email]);
    } catch (\Exception $e) {
        if ($e->getCode() == 23000 && $e instanceof QueryException) {
            //Тут я обрабатываю создание дубликата
        } else {
            throw $e;
        }
    }
    Ответ написан
    Комментировать
  • Почему PhpStorm требует установки расширения для curl и json?

    Ninazu
    @Ninazu
    Расширение - это дополнительные модули в PHP, они реализуют конкретно в вашем случае работу с CURL и JSON.
    Узнать подключенные модули
    https://www.php.net/manual/ru/function.extension-l...
    Список всех модулей
    https://www.php.net/manual/ru/extensions.alphabeti...

    Если на вашем сервере они установленны, то не факт что они будут установленны и на другом сервере. Поэтому PHPStorm рекоммендует добавить их в правила композера, чтоб в случае разворачивания на другом сервере, композер сообщил вам что расширения отсутсвуют

    Если бесит инспектор, то можете отключить это уведомление.
    5d4061ba05631701466003.png
    Ответ написан
    3 комментария
  • Как обновлять nodejs приложение, чтобы не потерять данные?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Сохраняют в отдельное место.
    К примеру, если не хотите отдельную базу поднимать, то можно локально помечать данные, которые не ушли вам в базу.
    Если локальные данные равны данным в базе, то локальные данные чистить, а если нет, то подгружать к себе, а потом чистить.
    Ответ написан
    Комментировать
  • Вебсокеты вместо обычных соединений?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    1) Сокеты - более дорогое по ресурсам соединение, ибо занимает слот и не умирает, оно выгодно там где в нем есть необходимость. В спа такой необходимости нет.
    2) Писать код (и потом его обслуживать) как на фронте так и на бэке проще(читай дешевле) в классическом стиле, нежели оборачивать все в сокет. А бизнес не любит тратить лишние деньги. Это и к п. 1 относится.
    3) Stalker_RED пишет что с кешированием могут возникнуть нюансы, я сходу не могу сказать так ли это, имхо в этом проблем не будет, если вы будете тащить сокетом только разметку, а статику брать по православному хттп. В случае статики по сокету конечно же вы хапнете этой беды по полной. Больше меня смущает как будет видеть страничку поисковый бот, но тут уже не узнаешь пока не построишь.
    Ответ написан
    Комментировать
  • Веб-сокеты и обычные запросы. Что быстрее?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1. простейший скрипт на node.js держит одновременно ~100k открытых сокетов.
    Запустив пачку процессов можно держать миллион на одном слабеньком сервере.
    habrahabr.ru/post/123154
    Очевидно что простыми запросами Вы такую нагрузку не выдержите.
    Еще один плюс - через сокет ваш клиент получает обновление сразу
    Еще один плюс - через сокет можно организовать двухсторонний протокол обмена, без лишних запросов

    2. Вы можете это проверить самостоятельно :)
    Один из плюсов socket.io - их js клиент который сам определяет наличие поддержки сокетов и если их нет - работает через long polling

    3. На практике - может быть обрыв связи, особенно на мобильном интернете.
    Надо уметь с этим работать + при восстановлении - запрашивать что изменилось обычным запросом.
    Ответ написан
    Комментировать
  • Как сделать мягкое удаление и использовать уникальные ключи?

    Gomonov
    @Gomonov
    Я бы не использовал deleted_at как флаг, что сущность удалена - это больше справочная информация.
    Завёл бы поле is_delete
    Ответ написан
    3 комментария
  • Как сохранить пользователя facebook изменив id приложения?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Это возможно используя Business Manager + https://developers.facebook.com/docs/facebook-logi...
    Ответ написан
    Комментировать
  • Почему nuxt такой медленный?

    evgensenin
    @evgensenin
    Yii2 || Laravel, vue & nuxt
    Тоже заметил подобное. (но не прям реальная тормознутость, просто отклик у php приложений на порядок меньше в миллисекундах(мс), чем на nuxt), возможно особенности nodejs
    Попробуйте пожалуйста https://github.com/arash16/nuxt-ssr-cache и напишите
    и на всяк случай - https://nuxtjs.org/api/configuration-build/#cache
    Ответ написан
    6 комментариев
  • Как laravel принимает из JS массив?

    Stalker_RED
    @Stalker_RED
    По умолчанию axios действительно отправляет application/json, а не application/x-www-form-urlencoded
    Можете проверить, что именно отправляется в девтулс, например.

    Возможно Laravel автоматичски разворачивает это все в "обычные" поля.
    UPD: Похоже, что так и есть (тыц).
    В "сыром" виде json был (в версии 4.2, например) доступен через Request::json->all(), затем это убрали из документации.

    Возможно в будущем (или уже?) уберут и из кода. Проверять лень.
    Ответ написан
    1 комментарий
  • Почему сортировка массива "вешает" страницу во Vue?

    @Severn101
    Здесь бесконечный цикл получается.
    Метод sort изменяет массив events. Vue видит изменения и повторно запускает вычисление sortedEvents.
    Вам уже правильно посоветовали, используйте watch, либо делайте копию массива events в computed и сортируйте уже его.
    Ответ написан
    3 комментария
  • В чем опасность "клиентской" oAuth авторизации?

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

    Хэш используется для предотвращения утечек токена наружу, например через Referer страницы.
    Ответ написан
    Комментировать
  • В чем опасность "клиентской" oAuth авторизации?

    usdglander
    @usdglander
    Yipee-ki-yay
    нам на сайт с токеном в хэшэ

    Любой прокси на пути от вас до сайта видит ваш запрос. Администратор этого прокси может запросто выдернуть ваш хеш, аннулировать ваш запрос и повторить от своего имени. Тогда он авторизуется под вашей учётной записью.
    И еще интересно, почему он передается именно в хэшэ? Почему не гет параметром, например?

    Скорее всего традиционно сложилось просто.
    Ответ написан
    4 комментария
  • Зачем существует "дырявая" клиентская oAuth авторизация?

    >>Зачем вообще существует второй вариант? Ведь любой узел (сисадмин, владелец точки wi-fi, провайдер, товарищ майор) может просто взять готовый токен и использовать его.

    Данные передаётся по HTTPS! Следовательно токен не доступен промежуточным узлам, так как информация зашифрована.
    Если рассматривать авторизацию через ВКонтакте токен известен толкьо: 1) ВКонтакте, 2) Сайту на который производится авторизация, 3) самому пользователю осуществляющему авторизацию
    Все промежуточные провайдеры знают только что клиент по факту соединяется с некоторым IP адресом при использовании HTTPS протокола, и они не знают на какой url осуществляется запрос.
    Ответ написан
    2 комментария