• Запросы к API в React?

    RomReed
    @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    Считаю что запросы должны делаться с помощью саг потому что в какой то момент вам понадобится сделать этот же запрос но в другом месте и нужно будет как то разрулить все запросы в правильной последовательности и тд. И вам придется переписать запрос уже как надо на саги. И если вы уже начали использовать технологию то используйте ее по всему проекту а не частями.
    Ответ написан
    Комментировать
  • Файловая структура в React + Redux?

    О чём он? Как хуки позволяют это сделать?

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

    Делите ли вы свои компоненты на глупые и умные?

    Да, даже используя хуки я по привычке называю обертку над дочерним компонентом контейнером и стараюсь весь стейт и манипуляции с ним оставить в контейнере, передавая в дочерние компоненты только коллбэки.
    Ответ написан
    Комментировать
  • Отдельная папка в Controllers для каждой роли?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Вам нужно понять принцип использования ролей и разрешений. Возможно вам поможет эта статья:
    Laravel 5. Иерархический RBAC для самых маленьких
    Ответ написан
    Комментировать
  • Теряется __ob__ observer у массива из стейта vuex?

    Sanasol
    @Sanasol Куратор тега JavaScript
    нельзя просто так взять и загуглить ошибку
    return this.$store.state.comments.filter(comment => comment.post_id === this.postId);

    Так оно не работает что ли в этом случае? Вроде было должно.

    Если нет, то запилите фильтрацию в самом стейте, пример по той же ссылке. Хотя причин не работать у варианта с computed нет, если вы только не упростили эту самую причину для вопроса :)
    Ответ написан
    2 комментария
  • Как в laravel passport создать refresh_token?

    greabock
    @greabock
    Могу
    1. По умолчанию, персональные токены выдаются сроком на 1 год. (нужно ли беспокоится о времени истечения?)

    2. Персональные токены - это скорее "хак", который позволяет обойти стандартный флоу OAuth 2. Обычно он используется для упрощения доступа к апи, или персональных экспериментов.

    3. Правильный способ сделать то, что вы ( как я предполагаю) хотите, это запросить токен для password grant

    use GuzzleHttp\Psr7\ServerRequest as GuzzleRequest;
    use GuzzleHttp\Psr7\Response as GuzzleResponse;
    use League\OAuth2\Server\AuthorizationServer;
    use Illuminate\Http\Response;
    use Illuminate\Http\Request;
    
    
    $server = app(AuthorizationServer::class);
    
    $psrReponse = $server->respondToAccessTokenRequest((new GuzzleRequest('POST', ''))->withParsedBody([
        'grant_type'    => 'password',
        'client_id'     => '2' // Или какой клиент у вас там за гранты паролей отвечает,
        'client_secret' => '***',
        'username'      => 'god@skies.com',
        'password'      => 'my-very-strong-password',
        'scope'         => '',
    ]), new GuzzleResponse());
    // Можно сразу запросить на вход \Psr\Http\Message\ServerRequestInterface - лара умеет такое инжектить
    // Я накидал его руками - для наглядности
    // Это могут быть любые psr7 совместимые объекты Request и Response, не только Guzzle. 
    // Например Zend\Diactoros (его ижектит лара) тоже подойдет.
    
    // Ну а здесь уже конвертируем ответ в ларовский
    // Ответ будет содержать token_type, access_token, expires_in и refresh_token 
    // expires_in содержит время жизни токена в секундах
    // Например, по умолчанию для одного года это будет 60*60*24*366 = 31622400
    return new Response(
        $psrReponse ->getBody(),
        $psrReponse ->getStatusCode(),
        $psrReponse ->getHeaders()
     );


    Здесь не описана обработка ошибок, так как я предполагаю, что данный сценарий выходит за рамки OAuth спецификации и ответы с ошибками имеют право ей не соответствовать. Это я оставлю на ваше усмотрение.
    Ответ написан
    2 комментария